martes, julio 04, 2006

Procesadores post-instanciación en Spring 2.0

Debasish Ghosh nos enseña aquí un nuevo "feature" de Spring 2.0: la habilidad de realizar inyección de dependencias a beans que *no* han sido instanciados por Spring. Un buen ejemplo son los beans que genera Hibernate (o cualquier ORM) mediande *new*.

Esto se consigue con la anotación "@Configurable" o con "AnnotationBeanConfigurerAspect" para los que no desean utilizar anotaciones y el xml de beans de siempre:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans">

<aop:spring-configured/>

<bean id="myDao"
class="package.ChildrensDaoImpl"/>

<bean id="myClass" class="package.MyClass" lazy-init="true">
<property name="dao" ref="myDao" />
</bean>
</beans>

@Configurable("myClass")
public class MyClass {
private Dao dao;
public String getChildrens(...) {
List childrens = dao.find(...);
}
public void setDao(Dao dao) {
this.dao = dao;
}
}
Con esta configuración y un poco de *magia* AOP, logramos inyectar *service objects* en nuestros *domain objects*.