martes, diciembre 05, 2006

Nuevo tipo de configuración basado en anotaciones para Spring


Como ya saben, hay una nueva forma de configurar Spring. XML es el tipo de configuración mas utilizada para Spring, pero con este nuevo tipo, basado en anotaciones, podemos cambiar algo del "infierno xml". Dejaremos en paz la configuración mediante Groovy, al menos por ahora.
Los desarrolladores por ejemplo, pueden utilizar esto para alguna forma de configuración interna, dejando la configuración xml para infraestructura.
Pueden mirar en la web del proyecto las novedades, pero imaginen un xml como este:

<beans>
<bean id="myCompany" class="package.Company"/>
<bean id="employee" class="Employee" scope="prototype">
<property name="company" ref="myCompany"/>
</bean>
</beans>

podría hacerse así:

@Configuration
public class AppConfiguration {
@Bean
public Company myCompany() {
return new Company();
}

@Bean(scope = Scope.PROTOTYPE)
public Employee employee() {
Employee employee = new Employee();
employee.setCompany(myCompany());
return employee;
}
}

iniciando mas tarde un ApplicationContext con un bean ConfigurationPostProcessor, pudiendo incluso mezclar beans de ambos métodos:

<beans>
<bean class="package.AppConfiguration"/>
<bean class="org.springframework.beans.factory.java.ConfigurationPostProcessor"/>
<bean class="package.OtherClass">
<property name="employee" ref="employee"/>
</bean>
</beans>

Rod también nos muestra un nuevo application context (por Costin Leau):

ApplicationContext oneConfig =
new AnnotationApplicationContext(SimpleConfiguration.class.getName());

y

ApplicationContext aBunchOfConfigs =
new AnnotationApplicationContext("**/configuration/*Configuration.class");

Dejaremos a nuestra imaginación una forma de configuración mas dinámica todavía, mezclando loops y if/thens en el bean de configuración!
El código puede ser encontrado aquí. Que lo disfruten!

2 comentarios:

Anónimo dijo...

Buenísimo el resumen Niko! Sólo me suena mal conceptualmente el utilizar anotaciones (que son una forma de código estático en clases) para configurar un framework que en realidad está ideado para extraerles las dependencias...

Si es verdad que las anotaciones en Spring están muy bien para cuestiones menos intrusivas como la configuración de ORMs como con Hibernate.

Anónimo dijo...

Felicidades!. De todas formas, me gustaría encontrar el tutorial en el que describías todo un desarrollo con Spring, Hibernate, Ant, Acegui, y un montón de puntos más, interesantísimos para mi en este momento. Encontré el tutorial con emule, pero está incompleto (v. 0.1)..¿existe una versión acabada de "desdecero -Spring e hibernate-", me pareció fabuloso, pero me quede con cara de bobo al ver que estaban por desarrollar muchos puntos. Muchas gracias por compartir sabiduría.