У меня установлено два прокси 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 и снова выполню мой модульный тест, я получу следующее:
Нет уникального бина типа ... ожидается
один соответствующий боб, но найден 2:
[springDaoTarget, springDao]
Это то, что я ожидал.
Итак, я изменил свою автопроводку на
@Autowired
@Qualifier("springDaoTarget")
protected SpringCustomerCapacityDao springDao;
И добавил следующее в мой юнит-тест:
Object proxy = applicationContext.getBean("springDao");
Assert.assertNotNull(proxy);
Assert.assertTrue(proxy instanceof SpringDao);
И тест экземпляра не пройден, что (для меня) означает, что мой прокси-сервер на самом деле не является моим прокси.
Так что я в замешательстве. В чем дело? Как я могу это исправить?
Редактировать Вот запрошенное определение springDaoTarget, которое разочарует многих:
<bean id="springDaoTarget" class="com.company.SpringDao">