Java 注入初始化bean的列表
我需要将已经初始化的bean列表注入到另一个bean中 我有一个定义了一些惰性bean的类,这些bean的使用取决于环境,比如只在服务器1上使用Java 注入初始化bean的列表,java,spring,Java,Spring,我需要将已经初始化的bean列表注入到另一个bean中 我有一个定义了一些惰性bean的类,这些bean的使用取决于环境,比如只在服务器1上使用impl1和impl2,在服务器2上使用impl3和impl1 @Component class Definitions { @Bean @Lazy public A impl1() { /* ... */ } @Bean @Lazy public A impl2() { /* ... */ }
impl1
和impl2
,在服务器2上使用impl3
和impl1
@Component
class Definitions {
@Bean
@Lazy
public A impl1() { /* ... */ }
@Bean
@Lazy
public A impl2() { /* ... */ }
@Bean
@Lazy
public A impl3() { /* ... */ }
}
我有一些监视bean,它对环境一无所知,只收集所有那些A
bean,为执行器暴露一些健康信息:
@Component
class Monitoring implements HealthIndicator {
@Autowired
private List<A> monitored;
}
@组件
类监控实现了healthlindicator{
@自动连线
监测私人名单;
}
问题是spring将所有bean连接到受监控的
,即使它们之前没有初始化(这会使整个过程崩溃,因为没有合适的环境)。我需要以某种方式向spring解释,我只需要已经初始化的bean,比如@autowirelonlythoselazybeans,它可以在其他地方使用
另外,我知道我可以使用dirty hack在定义中声明一个list属性,填充bean工厂方法并注册另一个bean引用该列表,但它太脏了。解决方案是只编写自定义OSGi,比如“ServiceTracker”通过BeanPostProcessor监视某些特定类型的bean,并将动态bean与并发映射到上下文中的所有跟踪bean一起注册。也许您可以使用@Autowired(required=false)
?@RandallFlagg,它强制对bean进行急切的实例化,以便整个应用程序在缺少的环境中崩溃。因此,它可能无法按预期工作,或者我需要一些不会强制我的bean立即实例化的东西。请使用配置文件,并在不同的服务器上指定要应用的配置文件。@M.Deinum,这不会解决问题。相信我,这会解决问题,因为只有与配置文件匹配的bean才会加载并显示在应用程序上下文中。