While working on PoC for https://github.com/spring-projects/spring-boot/issues/42746, I encountered a strange behaviour when a bean is qualified and has default-candidate = false. For some reason, injection does not work when the constructor has a qualified parameter.
private final SomeService someService;
AutowireByConstructorQualifier(@Qualifier("test") SomeService someService) {
this.someService = someService;
}
As I understood, default-candidate
should back off the injection by plain type, but it should work when the parameter has a @Qualifier
annotation. What is weird that the following syntax works fine:
@Qualifier("test")
@Autowired
public void setSomeService(@Qualifier("test") SomeService someService) {
this.someService = someService;
}
It seems like it might be a bug, but I'm not entirely sure.
Sample: default-candidate-qualifier.zip
Comment From: nosan
By the way, this set method does not work as well:
@Autowired
public void setSomeService(@Qualifier("test") SomeService someService) {
this.someService = someService;
}
Comment From: nosan
Thank you, @jhoeller