我有两个Spring代理设置:
<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;
当出现以下错误时,这是第一个表明有问题的迹象:
无法自动连接字段:……嵌套异常为java.lang.IllegalArgumentException
如果我注释掉@Qualifier注解并再次运行单元测试,我会得到以下结果:
没有唯一的bean类型……期望单个匹配的bean但找到了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">