Skip to content

getBeanNamesForType(ResolvableType) doesn't work for raw singleton instance from @Bean method with generic return type [SPR-17524] #22056

Closed
@spring-projects-issues

Description

@spring-projects-issues

Konstantin opened SPR-17524 and commented

When calling beanFactory.getBeanNamesForType with  ResolvableType.forClassWithGenerics(), if bean is lazy it works, after initialization or bean not lazy this code will not work. 

Here's a case, all asserts return true:

@SpringBootApplication 
public class DemoApplication \{
 public static void main(String[] args) {
 ConfigurableApplicationContext run = SpringApplication.run(DemoApplication.class, args);
 assert run.getBeanNamesForType(ResolvableType.forClassWithGenerics(Test.class, String.class)).length == 0; 
 assert run.getBean(run.getBeanNamesForType(ResolvableType.forClassWithGenerics(Test.class, Integer.class))[0]) != null;
 assert run.getBeanNamesForType(ResolvableType.forClassWithGenerics(Test.class, Integer.class)).length == 0; } 

@Bean 
Test<String> getString() \{ 
return new Test<>(); 
} 

@Bean 
@Lazy 
Test<Integer> getInteger() \{ 
return new Test<>();
 } }

 class Test<T>\{ }

Affects: 5.1.2

Issue Links:

Referenced from: pull request #2027, and commits ebbe14c, e9f7c35, 7b2eebe

Backported to: 5.0.11, 4.3.21

Metadata

Metadata

Assignees

Labels

in: coreIssues in core modules (aop, beans, core, context, expression)status: backportedAn issue that has been backported to maintenance branchestype: bugA general bug

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions