I have several beans of the same class defined:
@Bean
public FieldDescriptor fullSpotField() {
FieldDescriptor ans = new FieldDescriptor("full_spot", String.class);
return ans;
}
@Bean
public FieldDescriptor annotationIdField() {
FieldDescriptor ans = new FieldDescriptor("annotationID", Integer.class);
return ans;
}
consequently when I autowire them
@Autowired
public FieldDescriptor fullSpotField;
@Autowired
public FieldDescriptor annotationIdField;
I get an exception
NoUniqueBeanDefinitionException: No qualifying bean of type [...FieldDescriptor] is defined: expected single matching bean but found ...
How to autowire by name as it possible in XML config?
You can use @Qualifier
to solve it.
In your case you can make:
@Bean(name="fullSpot")
// Not mandatory. If not specified, it takes the method name i.e., "fullSpotField" as qualifier name.
public FieldDescriptor fullSpotField() {
FieldDescriptor ans = new FieldDescriptor("full_spot", String.class);
return ans;
}
@Bean("annotationIdSpot")
// Same as above comment.
public FieldDescriptor annotationIdField() {
FieldDescriptor ans = new FieldDescriptor("annotationID", Integer.class);
return ans;
}
and subsequently you can inject using:
@Autowired
@Qualifier("fullSpot")
public FieldDescriptor fullSpotField;
@Autowired
@Qualifier("annotationIdSpot")
public FieldDescriptor annotationIdField;
Its a very simple case of "Autowiring By Name" beans gets registered into the container by itself, but might require the constructor injection when using autowiring by name.
You can go ahead and try like this, Where ever you are autowiring the 2 beans which are specified above,
class ExampleClass {
@Autowired
public FieldDescriptor fullSpotField;
@Autowired
public FieldDescriptor annotationIdField;
public ExampleClass(FieldDescriptor fullSpotField,FieldDescriptor annotationIdField ){
super();
this.fullSpotField = fullSpotField;
this.annotationIdField = annotationIdField;
}
}
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.