java - qualifier - spring autowired example
¿Es posible usar @Resource en un constructor? (3)
De la fuente de @Resource
:
@Target({TYPE, FIELD, METHOD})
@Retention(RUNTIME)
public @interface Resource {
//...
}
Esta línea:
@Target({TYPE, FIELD, METHOD})
significa que esta anotación solo se puede colocar en Clases, Campos y Métodos. CONSTRUCTOR
falta.
Me preguntaba si sería posible usar la anotación @Resource
en un constructor.
Mi caso de uso es que quiero conectar un campo final llamado bar
.
public class Foo implements FooBar {
private final Bar bar;
@javax.annotation.Resource(name="myname")
public Foo(Bar bar) {
this.bar = bar;
}
}
Recibo un mensaje que @Resource
que @Resource
no está permitido en esta ubicación. ¿Hay alguna otra manera de poder conectar el campo final?
Para complementar la respuesta de Robert Munteanu y para futuras referencias, aquí es cómo se ve el uso de @Autowired
y @Qualifier
en el constructor:
public class FooImpl implements Foo {
private final Bar bar;
private final Baz baz;
@org.springframework.beans.factory.annotation.Autowired
public Foo(Bar bar, @org.springframework.beans.factory.annotation.Qualifier("thisBazInParticular") Baz baz) {
this.bar = bar;
this.baz = baz;
}
}
En este ejemplo, la bar
solo se activa automáticamente (es decir, solo hay un bean de esa clase en el contexto, así que Spring sabe cuál usar), mientras que baz
tiene un calificador para decirle a Spring qué bean particular de esa clase queremos inyectar.
Utilice @Autowired
o @Inject
. Esta limitación se trata en la documentación de referencia de Spring: Ajuste automático del cableado automático basado en anotaciones con calificadores :
@Autowired se aplica a campos, constructores y métodos de argumentos múltiples, lo que permite reducir las anotaciones de calificador en el nivel de parámetro. Por el contrario, @Resource solo es compatible con los campos y los métodos de establecimiento de propiedades de bean con un solo argumento. Como consecuencia, quédese con calificadores si su objetivo de inyección es un constructor o un método de argumentos múltiples.