我有一个服务,它将对特定类型的所有bean进行后处理,提供一些初始化,并提供一个包含该步骤的一些派生信息的新bean。后处理的结果是一些静态初始化,以及一组远程连接细节(然后用于构造其他bean)。
我想做的是,它只运行在我的应用程序上下文已经已经初始化的bean上 - 即不实例化那些本来不会的bean创建是因为它们使用@Lazy
注释:
@Config
public class MyPostProcessingBean {
@Bean
RemoteConnectionDetails postProcessBeans(PostProcessable... beans) {
for (PostProcessable b : bean) {
b.postProcess();
}
return ...
}
}
@Lazy
@Component
class X implements PostProcessable {
....
}
@Lazy
@Component
class Y implements PostProcessable {
}
@Bean
Foo foo(X x, RemoteConnectionDetails rcd) { ... }
我的自动线程候选者只需要一个X
的实例 - 所以我理想情况下只是为了实例化(和处理)一个X.目前,当Spring解析{{1}的所有候选者时它也在实例化PostProcessable...
。
我认为使用Y
进行后处理,但需要立即对所有PostProcessable bean进行初始化(这是必须在所有组件准备好后运行的最后一步)。 / p>
Spring上下文启动后的回调为时已晚,因为我需要注入BeanPostProcessor
来完成我的上下文连接。
RemoteConnectionDetails
上的@Lazy
注释只会延迟不必要的bean的实例化;它并没有阻止它。
是否有一些受支持的方法来构建bean#34;这个上下文中已经需要的给定类型的所有bean <&em>&#34;