Primavera Autowiring interfaz frente a la clase?
-
24-09-2019 - |
Pregunta
Tengo esta configuración de primavera:
<bean id="boo" class="com.x.TheClass"/>
El TheClass
implementos TheInterface
clase. Entonces tengo este (hipotética) de código Java:
@Autowired
TheInterface x;
@Autowired
TheClass y;
El autowiring de obras TheInterface
pero el autowiring de TheClass
falla. Primavera me da una NoSuchBeanDefinitionException
para la clase.
¿Por qué se puede conectar la interfaz y no a la clase?
Solución
Normalmente, ambos funcionan, puede Autowire interfaces o clases.
Hay alguna parte, probablemente, un generador de autoproxy en su contexto, que está terminando su grano de boo
en un objeto proxy generado. Este objeto proxy implementará TheInterface
, pero no será un TheClass
. Al utilizar autoproxies, es necesario programa en la interfaz, no la implementación.
El candidato probable es proxies transaccionales - está usando transacciones Spring, utilizando AspectJ o @Transactional
?