繁体   English   中英

注入初始化的bean列表

[英]Inject list of initialized beans

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

我有一些根据环境使用的懒豆的定义的类-例如在服务器1上仅使用impl1impl2 ,在服务器2上使用impl3impl1

@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;
}

问题在于,即使没有对它们进行初始化,弹簧也会将所有bean连接到monitored (这会使整个事情崩溃,导致没有合适的环境)。 而且我需要以某种方式向春天解释我只需要已经初始化的@AutowireOnlyThoseLazyBeansWhichAlreadyBeenUsedSomewhereElse就像@AutowireOnlyThoseLazyBeansWhichAlreadyBeenUsedSomewhereElse

PS我知道我可以使用肮脏的hack并在Definitions声明一个list属性,将其填充到bean工厂方法中,并引用该列表注册另一个bean,但这太脏了。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM