Skip to content

Bean with defaultCandidate = false and qualifier does not work with constructor injection #33762

@nosan

Description

@nosan

While working on PoC for spring-projects/spring-boot#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

Metadata

Metadata

Assignees

Labels

in: coreIssues in core modules (aop, beans, core, context, expression)type: bugA general bug

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions