Spring:获取注入到bean中的bean列表

irlmq6kh  于 2022-12-17  发布在  Spring
关注(0)|答案(1)|浏览(278)

我正在寻找一种方法来列出在运行时注入到特定Spring bean中的bean。例如,给定以下两个类:

@Controller
public class TestController {

    @Autowired
    private TestComponent testComponent;

    private final TestService testService;

    public TestController(TestService testService) {
        this.testService = testService;
    }
}

以及

@Service
public class TestService {

}

以及

@Component
public class TestComponent {

}

TestController类的bean列表应返回:

  • TestService(通过构造函数注入)
  • TestComponent(通过@Autowired注解注入)

是否有现成的Spring助手/实用程序可以为我返回这些信息?

fhg3lkii

fhg3lkii1#

您可以使用方法getDependenciesForBean()ConfigurableBeanFactory查询依赖bean的名称以获得给定的bean名称。

try (ConfigurableApplicationContext app = SpringApplication.run(MySpringApplication.class)) {
    ConfigurableListableBeanFactory beanFactory = app.getBeanFactory();
    String[] dependencies = beanFactory.getDependenciesForBean("testController");
    System.out.println(Arrays.toString(dependencies)); // [testService, testComponent]
}

这里的问题是你只处理bean的 names,所以为了使代码对给定的bean示例通用,你必须找出bean的名称(可能不是唯一的),而且当你为这些名称获取实际注入的bean时,你可能没有得到相同的示例(因为bean定义上的@Scope(SCOPE_PROTOTYPE))。

相关问题