2つの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">