Spring 3 – Inyección de Dependencias – Anotaciones
Una manera muy cómoda de inyectar las dependencias a una clase en Spring 3 es mediante el uso de etiquetas. De momento, yo sólo uso esta modalidad para inyectar las dependencias en los test: si quiero probar un DAO prefiero utilizar una anotación a tener que crear un XML porque seguramente será poco reutilizable.
En Spring v03.xx tenemos las siguientes posibilidades de popular beans mediante etiquetas:
@Resource, es una etiqueta especificada en la Java Specefication Request JSR-250 (Common Annotations for the JavaTM Platform). En Spring, inyectará la dependencia por nombre. Es decir, buscará dentro del contexto un bean cuyo nombre coincida con el nombre de la variable etiquetada. En el Contenedor IoC, un bean puede tener uno o más identificadores (puede tener aliases), pero todos ellos deben ser únicos en el ámbito del contenedor.
@Autowired, es una etiqueta especificada por el propio framework de Spring. En Spring, inyectará la dependencia por tipo. Es decir, buscará dentro del contexto un bean cuya clase coincida con el tipo de variable etiquetada.
@Inject, es una etiqueta especificada en la Java Specefication Request JSR-330 (Dependency Injection for Java). Es intercambiable por la etiqueta @Autowired siempre que su JAR esté en nuestro classpath.
La inyección de dependencias por tipo puede encontrarse con que dentro del mismo contexto existan más de un bean con el mismo tipo. Un ejemplo sería si tenemos un bean llamado administrador del tipo persona, otro bean llamado superadministrador del tipo persona, y una variable de tipo persona etiquetada con @Autowired o @Inject. Estos casos se utiliza la etiqueta @Qualifier para discriminar por nombre el bean que deseamos cargar, ya que el nombre sí que es único dentro del contenedor.
Ojo, porque la implementación de la etiqueta @Qualifier de la JSR-330 es distinta a la de la etiqueta @Qualifier de Spring v03.xx.
En resumen
¿Cuál es la mejor forma de inyectar dependencias en Spring 3? ¿Mediante configuración XML, mediante código Java, mediante anotaciones de Spring o mediante anotaciones de JSR-330? Pues la respuesta, como casi siempre en este tipo de preguntas, es que depende de la situación
Relacionado
@Required, esta etiqueta simplemente indica que la propiedad anotada debe ser populada en tiempo de configuración, es decir cuando se carga el contexto de Spring, bien mediante Autowiring o bien mediante configuración del bean en el XML. Si no es populada, entonces Spring lanza una excepción.
Notas
Ver la documentación original de Spring 3:
- The Inversion of Control Container.
- Autowiring collaborators, que incluye además los modos en los que trabaja.
- Annotation-based container configuration.
En versiones anteriores a v03.xx no existe diferencias entre las etiquetas.






