0

ファイルで以下のステートメントを使用してい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>

さよなら....

4

1 に答える 1

1

BeancacheDelegateは ID を参照する Bean を検索していstatusDBDAOますが、DAO の ID は実際にはBMOStatusDBDAOです。

于 2013-11-01T16:04:04.600 に答える