J'ai cette configuration de printemps:
<bean id="boo" class="com.x.TheClass"/>
La classe TheClass
implémente TheInterface
. Ensuite, j'ai ce (hypothétique) Java code:
@Autowired
TheInterface x;
@Autowired
TheClass y;
Le câblage automatique de TheInterface
fonctionne mais le câblage automatique de TheClass
échoue. Le printemps me donne un NoSuchBeanDefinitionException
pour la classe.
Pourquoi pouvez-vous câbler l'interface et non la classe?
Normalement, les deux fonctionnent, vous pouvez câbler automatiquement des interfaces ou des classes.
Il y a probablement un générateur autoproxy quelque part dans votre contexte, qui enveloppe votre bean boo
dans un objet proxy généré. Cet objet proxy implémentera TheInterface
, mais ne sera pas un TheClass
. Lorsque vous utilisez des autoproxies, vous devez programmer sur l'interface, pas sur l'implémentation.
Le candidat probable est les proxys transactionnels - utilisez-vous des transactions Spring, utilisez AspectJ ou @Transactional
?