【问题标题】:Null Pointer Exception - spring 3空指针异常 - spring 3
【发布时间】:2013-11-01 14:45:36
【问题描述】:

我在我的applicationContext.xml 文件(Spring 3)中使用了以下语句。

<bean name="loggingAutoProxy"
      class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator"> 

在此 applicationContext 文件中,当我尝试为 bean 属性名称和引用指定不同的名称时,它返回 null 对象。但是,如果我为名称和引用提供相同的值,则它工作正常/正确返回 bean 引用。这个问题是因为org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator吗?如果是,如何解决这个问题?

这不起作用(在我的 java 代码中将 bean 引用返回为 null):

<bean id="cacheDelegate" class="com.srsa.wiradmin.delegate.CacheDelegate" > 
<property name="statusDBDAO"><ref bean="BMOStatusDBDAO" /></property> 
</bean> 

 <bean id="BMOStatusDBDAO" class="com.srsa.wiradmin.dao.StatusDBDAO">
        <property name="dataSource">
            <ref bean="BMOAdminDataSource" />
        </property>
</bean>
    <bean id="BMOAdminDataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" 
                    destroy-method="close" lazy-init="default" autowire="default" dependency-check="default">
            <property name="driverClass" value="${jdbc.driver}" ></property>
            <property name="jdbcUrl" value="${admin.jdbc.url}" ></property>
            <property name="user" value="${admin.jdbc.user}" ></property>
            <property name="password" value="${admin.jdbc.password}" ></property>
            <property name="initialPoolSize" value="3" ></property>
            <property name="minPoolSize" value="3" ></property>
            <property name="maxPoolSize" value="25" ></property>
            <property name="acquireIncrement" value="1" ></property>
            <property name="acquireRetryDelay" value="1000" ></property>
            <property name="debugUnreturnedConnectionStackTraces" value="true" ></property>
            <property name="maxIdleTime" value="300" ></property>
            <property name="unreturnedConnectionTimeout" value="300000" ></property>
            <property name="preferredTestQuery" value="SELECT COUNT(*) FROM LOCALE_CODE" ></property>
            <property name="checkoutTimeout" value="300000" ></property>
            <property name="idleConnectionTestPeriod" value="600000" ></property>
</bean>

这有效(正确返回对象):

<bean id="cacheDelegate" class="com.srsa.wiradmin.delegate.CacheDelegate" > 
<property name="statusDBDAO"><ref bean="statusDBDAO" /></property> 
</bean> 

 <bean id="statusDBDAO" class="com.srsa.wiradmin.dao.StatusDBDAO">
        <property name="dataSource">
            <ref bean="BMOAdminDataSource" />
        </property>
</bean>

    <bean id="BMOAdminDataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" 
                    destroy-method="close" lazy-init="default" autowire="default" dependency-check="default">
            <property name="driverClass" value="${jdbc.driver}" ></property>
            <property name="jdbcUrl" value="${admin.jdbc.url}" ></property>
            <property name="user" value="${admin.jdbc.user}" ></property>
            <property name="password" value="${admin.jdbc.password}" ></property>
            <property name="initialPoolSize" value="3" ></property>
            <property name="minPoolSize" value="3" ></property>
            <property name="maxPoolSize" value="25" ></property>
            <property name="acquireIncrement" value="1" ></property>
            <property name="acquireRetryDelay" value="1000" ></property>
            <property name="debugUnreturnedConnectionStackTraces" value="true" ></property>
            <property name="maxIdleTime" value="300" ></property>
            <property name="unreturnedConnectionTimeout" value="300000" ></property>
            <property name="preferredTestQuery" value="SELECT COUNT(*) FROM LOCALE_CODE" ></property>
            <property name="checkoutTimeout" value="300000" ></property>
            <property name="idleConnectionTestPeriod" value="600000" ></property>
</bean>

再见....

【问题讨论】:

  • 你有一个名为BMOStatusDBDAO的bean吗?
  • 好吧,您的映射显然有问题。我敢打赌BMOStatusDBDAO 是您注册为bean 的类的名称,而statusDBDAO 是该注册bean 的实际id
  • 嗨安德斯..是的,我有。
  • 嗨甘布。我已经编辑了我的查询并添加了剩余的代码。
  • 嗨。是否与自动布线或内部发生的类似情况有关,并且不允许我为 bean 属性名称和引用使用不同的名称?请帮忙。再见。

标签: java spring spring-mvc


【解决方案1】:

您的 cacheDelegate bean 正在查找引用 ID statusDBDAO 的 bean,但 DAO 上的 ID 实际上是 BMOStatusDBDAO

【讨论】:

  • 在本网站复制粘贴时,我打错了...我已经编辑了我在上面提出的问题。请再看一遍。请参阅标题下的代码“这不起作用(在我的 java 代码中将 bean 引用返回为 null):”和“这有效(正确返回对象):”...... .. 请指教。非常感谢。
  • 如果你把 loggingAutoProxy 拿出来,它会按预期工作吗?
猜你喜欢
  • 2017-07-02
  • 1970-01-01
  • 1970-01-01
  • 2016-09-17
  • 2018-10-01
  • 2019-02-06
  • 2012-07-07
  • 2018-12-31
  • 1970-01-01
相关资源
最近更新 更多