我使用的是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'之前完成?
UPDATE
Bean A是一个自定义类,它使用JMS模板发送消息,通知他已初始化.
所述消息的接收者处理它并将其配置转发给MessageListeningContainer(Bean B).
第一部分是在DefaultLifecycleProcessor启动Bean B之前发生的.
@Component
@DependsOn("beanB")
public class BeanA {
@PostConstruct
public void init() {
// do stuff
}
}
<bean id="beanB" class="org.springframework.jms.listener.DefaultMessageListenerContainr">
<!-- other configuration -->
</bean>
Run Code Online (Sandbox Code Playgroud)
我在init方法中添加了bean b的注入以及两个日志语句:
container.isRunning();
container.isActive();
Run Code Online (Sandbox Code Playgroud)
我查看了spring源,并在初始化方法(doInitialized完成)后将isActive设置为true.doStunning在doStart完成后设置.doStart由DefaultLifecycleProcessor触发,该调用在调用@PostConstruct注释方法之后发生.
我怎样才能保证在初始化和启动bean b之后调用我的Postconstruct方法?
在您的特定情况下,在@PostConstruct
B 完全初始化之前,不会调用 bean A 的方法,即。它的所有依赖项都被注入并@PostConstruct
完成执行。
更新:由于您在这里依赖 Spring Lifecycle 功能,您可以Lifecycle
在 A 中实现并将 JMS 调用移至start()
那里的方法吗?
归档时间: |
|
查看次数: |
30830 次 |
最近记录: |