que tienen un grano de primavera, digamos:¿Es posible desprogramar un Spring Bean?
@TransactionAttribute(TransactionAttributeType.REQUIRED)
public class AImpl implements A {
public void setSomeDependency(D dependency) {
// This setter DOES NOT BELONG to interface A
}
}
<bean id="aImpl" class="AImpl"/>
Ahora quiero poner a prueba la integración, pero primero tengo que burlarse de la dependencia D
, porque hace demasiado material. Desde el AImpl
implementa una interfaz y contiene una anotación de transacciones, el proxy generada sólo es compatible con la interfaz A
, por lo que se puede hacer esto:
@Inject @Named("aImpl")
private A a;
pero no puede:
@Inject @Named("aImpl")
private AImpl a;
Como resultado, No puedo burlarme de mi dependencia.
Tenga en cuenta que agregar void setSomeDependency(D dependency)
a la interfaz A
no es una opción, ya que no tiene ningún significado comercial. Tampoco está usando proxy-target-class="true"
, ya que rompe una gran cantidad de otros beans (este atributo afecta a todos los beans en el contexto).
¿Hay alguna manera de desprogramar el bean inyectado A
, por lo que podría convertirlo en AImpl
?
posible duplicado de [Lanzar un objeto Proxy de Spring a la clase de tiempo de ejecución real] (http://stackoverflow.com/questions/5976247/casting-a-springs-proxy-object-to-the-actual-runtime-class) – skaffman
@skaffman: gracias por señalarlo, agregué esa pregunta a Spring Tag Preguntas frecuentes –