【发布时间】:2012-02-08 00:17:19
【问题描述】:
我使用的是 Spring 3.0.2。我有两个相对简单的 bean 定义。一个有一个@PostConstruct(bean'A'),它触发@DependsOn bean(bean'B')需要准备的一系列事件。然而,即使我说 bean 'A' 依赖于 bean 'B',bean 'A' 的事件(生命周期方法)似乎在 bean 'B' 完全初始化之前运行。
通过@DependsOn 声明一个bean 是“依赖的”(或者就此而言,在bean 定义中依赖)是否意味着依赖bean 的生命周期方法将在依赖于所述bean 的bean 之前完成?
bean 'B' 生命周期方法会在 bean 'A' 之前完成吗?
更新
Bean A 是一个自定义类,它使用 JMS 模板发送消息,宣布他已初始化。
所述消息的接收者对其进行处理并将其配置转发到 MessageListeningContainer (Bean B)。
第一部分发生在 Bean B 被 DefaultLifecycleProcessor 启动之前。
@Component
@DependsOn("beanB")
public class BeanA {
@PostConstruct
public void init() {
// do stuff
}
}
<bean id="beanB" class="org.springframework.jms.listener.DefaultMessageListenerContainr">
<!-- other configuration -->
</bean>
我在我的 init 方法中添加了 bean b 的注入和两个日志语句:
container.isRunning();
container.isActive();
查看了spring源码,isActive在Initialization方法(doInitialized完成)后设置为true。 isRunning 在 doStart 完成后设置。 doStart 由 DefaultLifecycleProcessor 触发,这是在调用 @PostConstruct 注释方法之后发生的。
如何保证在 bean b 初始化并启动后调用我的 Postconstruct 方法?
【问题讨论】:
-
(你的类 defs 的骨架可能有助于理解;我发现这有点难以阅读。)
标签: java spring jms spring-jms