我有兩個春天的代理設置:Spring AOP的代理,是不是
<bean id="simpleBean" class="org.springframework.aop.framework.ProxyFactoryBean">
<property name="target">
<ref local="simpleBeanTarget"/>
</property>
<property name="interceptorNames">
<list>
<value>cacheInterceptor</value>
</list>
</property>
</bean>
<bean id="springDao" class="org.springframework.aop.framework.ProxyFactoryBean">
<property name="target" ref="springDaoTarget"/>
<property name="interceptorNames">
<list>
<value>daoInterceptor</value>
</list>
</property>
</bean>
爲SimpleBean工作得很好 - springDao沒有。
的SpringDao類的樣子:
public class SpringDao extends JdbcDaoSupport {
private SimpleJdbcTemplate simpleJdbcTemplate;
public SimpleJdbcTemplate getSimpleJdbcTemplate() {
if (simpleJdbcTemplate==null) {
simpleJdbcTemplate= new SimpleJdbcTemplate(getDataSource());
}
return simpleJdbcTemplate;
}
...
我有我的單元測試自動裝配這樣的:
@Autowired
@Qualifier("springDao")
protected SpringDao springDao;
而且第一指示什麼是錯的是我得到這個錯誤:
Could not autowire field: . . . nested exception is java.lang.IllegalArgumentException
如果我註釋@Qualifier註釋並再次運行我的單元測試,我得到這個:
No unique bean of type ... expected single matching bean but found 2: [springDaoTarget, springDao]
這就是我的預期。
所以我改變了我的自動裝配來
@Autowired
@Qualifier("springDaoTarget")
protected SpringCustomerCapacityDao springDao;
,並添加以下到我的單元測試:
Object proxy = applicationContext.getBean("springDao");
Assert.assertNotNull(proxy);
Assert.assertTrue(proxy instanceof SpringDao);
而且instanceof的測試失敗,這(對我來說)是指我的代理不是真的是我的代理。
所以我很困惑。這是怎麼回事?我怎樣才能解決這個問題?
編輯這裏是請求springDaoTarget定義,這將令人失望很多人:
<bean id="springDaoTarget" class="com.company.SpringDao">
什麼版本springframework的您使用的是?我假設1.0。 – leeand00 2008-11-20 13:38:26