java - example - Spring Autowiring clase vs. interfaz?
spring inject bean example (1)
Tengo esta configuración de primavera:
<bean id="boo" class="com.x.TheClass"/>
La clase TheClass
implementa TheInterface
. Entonces tengo este (hipotético) código de Java:
@Autowired
TheInterface x;
@Autowired
TheClass y;
El autovínculo de TheInterface
funciona, pero el autovínculo de TheClass
falla. Spring me da una NoSuchBeanDefinitionException
para la clase.
¿Por qué puedes conectar la interfaz y no la clase?
Normalmente, ambos funcionarán, puede autoconectar interfaces o clases.
Probablemente haya un generador de autoproxy en algún lugar de su contexto, que está envolviendo su bean boo
en un objeto proxy generado. Este objeto proxy implementará TheInterface
, pero no será TheClass
. Al usar autoproxies, necesita programar en la interfaz, no en la implementación.
El candidato probable son los proxies transaccionales: ¿está utilizando transacciones de Spring, utilizando AspectJ o @Transactional
?