注入初始化bean的列表

时间:2017-03-20 10:00:57

标签: java spring

我需要将已初始化的bean列表注入另一个bean。

我有一些类,其中包含一些根据环境使用的懒惰bean的定义 - 例如仅在服务器1上使用impl1impl2以及服务器2 impl3和{{ 1}}

impl1

我有一些监控bean,它对环境一无所知,只收集所有那些@Component class Definitions { @Bean @Lazy public A impl1() { /* ... */ } @Bean @Lazy public A impl2() { /* ... */ } @Bean @Lazy public A impl3() { /* ... */ } } bean暴露了执行器的一些健康信息:

A

问题是spring将所有bean连接到@Component class Monitoring implements HealthIndicator { @Autowired private List<A> monitored; } ,即使它们之前没有被初始化(这会导致整个事情崩溃,导致没有合适的环境)。我需要以某种方式向春天解释我只需要已经初始化的bean - 类似于monitored

P.S。我知道我可以使用脏黑客并在@AutowireOnlyThoseLazyBeansWhichAlreadyBeenUsedSomewhereElse中声明一个列表属性,在bean工厂方法中填充它并注册另一个bean参考该列表,但它太脏了。

1 个答案:

答案 0 :(得分:0)

解决方案是通过BeanPostProcessor监视某些特定类型的bean并在并发映射到上下文中的所有跟踪bean中注册动态bean来编写类似自定义OSGi的“ServiceTracker”。