Le Printemps de l'AOP Proxy qui n'est pas

J'ai deux Printemps proxys mis en place:

  <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 fonctionne très bien -- springDao ne pas.

La SpringDao classe ressemble à:

public class SpringDao extends JdbcDaoSupport {

private SimpleJdbcTemplate simpleJdbcTemplate;

public SimpleJdbcTemplate getSimpleJdbcTemplate() {

    if (simpleJdbcTemplate==null) {
        simpleJdbcTemplate= new SimpleJdbcTemplate(getDataSource());
    }
    return simpleJdbcTemplate;
}
    ...

Et j'ai mon test de l'unité autocâblés comme ceci:

@Autowired
@Qualifier("springDao")
protected SpringDao springDao;

Et la première indication que quelque chose est mauvais, c'est que je reçois cette erreur:

Ne pouvait pas autowire champ: . . . imbriquée
exception est
java.lang.IllegalArgumentException

Si j'en commentaire le @Qualifier d'annotation et d'exécuter mon unité de refaire le test, j'obtiens ceci:

Pas unique bean de type attendu ...
unique correspondant bean, mais trouvé 2:
[springDaoTarget, springDao]

Qu'est ce que j'attendais.

Et j'ai donc changé permettra à l'autowiring à

@Autowired
@Qualifier("springDaoTarget")
protected SpringCustomerCapacityDao springDao;

Et a ajouté ce qui suit à mon test de l'unité:

        Object proxy = applicationContext.getBean("springDao");

    Assert.assertNotNull(proxy);
    Assert.assertTrue(proxy instanceof SpringDao);

Et la instanceof test a échoué, ce qui (pour moi) signifie que mon proxy n'est pas vraiment mon proxy.

Donc, je suis confus. Ce qui se passe? Comment puis-je résoudre ce problème?

Modifier Ici est la demande springDaoTarget définition, qui va décevoir beaucoup de gens:

<bean id="springDaoTarget" class="com.company.SpringDao">
Quelle est la version de Springframework utilisez-vous? Je suis en supposant que 1.0.
Ouais c'est vrai. Printemps 1.0 avec @Autocâblés 😉

OriginalL'auteur MikeHoss | 2008-11-20