我需要将已初始化的bean列表注入另一个bean。
我有一些类,其中包含一些根据环境使用的懒惰bean的定义 - 例如仅在服务器1上使用impl1
和impl2
以及服务器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参考该列表,但它太脏了。
答案 0 :(得分:0)
解决方案是通过BeanPostProcessor监视某些特定类型的bean并在并发映射到上下文中的所有跟踪bean中注册动态bean来编写类似自定义OSGi的“ServiceTracker”。