【问题标题】:Null pointer exception in Spring dao, dependency injection using bean configurationSpring dao中的空指针异常,使用bean配置的依赖注入
【发布时间】:2014-07-17 06:06:35
【问题描述】:

当我尝试使用自动连线 bean 时出现以下异常(使用 Setter 方法和 XML 配置的依赖注入)

java.lang.NullPointerException
at com.ecms.controller.service.JobCreationServiceCMODImpl.txSaveData(JobCreationServiceCMODImpl.java:483)
at com.ecms.controller.action.CMODJobCreationAction.doSave(CMODJobCreationAction.java:440)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)

ezm-application.xml:

   <bean>
    <bean id="cmodJobCreationDao" class="com.ecms.controller.dao.CMODJobCreationDaoImpl">
    <property name="sessionFactory" ref="sessionFactory" />
</bean>
<bean id="jobCreationServiceCMOD" class="com.ecms.controller.service.JobCreationServiceCMODImpl">
    <property name="cmodJobCreationDao">
        <ref bean="cmodJobCreationDao" />
    </property>
</bean>

JobCreationServiceCMODImpl:

public class JobCreationServiceCMODImpl implements JobCreationServiceCMOD{
    /**
     *
     */
    private static final long serialVersionUID = 430594221158425380L;
    private static Log log = LogFactory.getLog(JobCreationServiceCMODImpl.class);
    private CMODJobCreationDao cmodJobCreationDao;

    …..
    /**
     * @return the cmodJobCreationDao
     */
    public CMODJobCreationDao getCmodJobCreationDao() {
        return cmodJobCreationDao;
    }

    /**
     * @param cmodJobCreationDao the cmodJobCreationDao to set
     */
    public void setCmodJobCreationDao(CMODJobCreationDao cmodJobCreationDao) {
        this.cmodJobCreationDao = cmodJobCreationDao;
    }

           public void txSaveData(JobCreationViewCMOD entity) throws Exception {
           JobCreationCMOD creation = new JobCreationCMOD();
        creation.setSrcFolder(entity.getSourceFolder());
        creation.setSrcApplicationGroup(entity.getApplicationGroup());
        creation.setSrcApplication(entity.getApplication());    
           cmodJobCreationDao.persistObject(creation);
           ..

CMODJobCreationDaoImpl:

public class CMODJobCreationDaoImpl extends BaseDaoImpl implements CMODJobCreationDao {

    static String query = "From JobCreationCMOD Where JOBID=?";

    /*
     * (non-Javadoc)
     * @see com.ecms.controller.dao.ProfileCreationDao#fetchRepParam(java.lang.Integer)
     */
    public List<RepositoryParam> fetchRepParams(Integer id) {
        return find(query, new Object[] { id });
    }
}

【问题讨论】:

  • 我猜你的CMODJobCreationAction 构造了一个JobCreationServiceCMODImpl 的新实例。使用应用程序上下文中的那个。

标签: spring dependency-injection nullpointerexception


【解决方案1】:

这里您的框架不知道 cmodJobCreationDao 对象。 cmodJobCreationDao.persistObject(creation);

如果你使用的是基于注解的 spring 配置,那么你可以自动装配

@Autowired
private CMODJobCreationDao cmodJobCreationDao;

或者在您的方法中,您可以在 txSaveData 方法中执行以下步骤:

ApplicationContext ctx = new ClassPathXmlApplicationContext("Your xml path");

cmodJobCreationDao = (CMODJobCreationDao) ctx.getBean("cmodJobCreationDao");

【讨论】:

    【解决方案2】:

    如果你看到堆栈跟踪

          at com.ecms.controller.service.JobCreationServiceCMODImpl.txSaveData(JobCreationServiceCMODImpl.java:483)
          at com.ecms.controller.action.CMODJobCreationAction.doSave(CMODJobCreationAction.java:440)
    

    您看到 CMODJobCreationAction.doSave 调用 JobCreationServiceCMODImpl.txSaveData,我很确定 JobCreationViewCMOD 为空。调试并检查为什么这个值为null,也许你需要在CMODJobCreationAction的bean定义中传递这个bean定义。无论如何,我很确定例外是在这一行中 creation.setSrcFolder(entity.getSourceFolder());因为就像我说的实体是空的

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-19
      • 1970-01-01
      • 2012-08-02
      • 2013-10-07
      • 2018-08-20
      相关资源
      最近更新 更多