Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 注入初始化bean的列表_Java_Spring - Fatal编程技术网

Java 注入初始化bean的列表

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() { /* ... */ }

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

我有一个定义了一些惰性bean的类,这些bean的使用取决于环境,比如只在服务器1上使用
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才会加载并显示在应用程序上下文中。