注释bean @DependsOn是否意味着依赖bean将被实例化或初始化?

时间:2012-01-11 16:17:34

标签: java spring jms spring-jms

我正在使用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之前完成? / p>

bean'B'生命周期方法是否会在bean'A'之前完成?

更新

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>

我在init方法中添加了注入bean b和两个日志记录语句:

container.isRunning();
container.isActive();

我查看了spring源,并且在初始化方法(doInitialized完成)之后将isActive设置为true。 doStunning在doStart完成后设置。 doStart由DefaultLifecycleProcessor触发,该调用在调用@PostConstruct注释方法之后发生。

我怎样才能保证在初始化和启动bean b之后调用我的Postconstruct方法?

1 个答案:

答案 0 :(得分:2)

在您的特定情况下,在B完全初始化之前,不会调用bean A的@PostConstruct方法,即。注入所有依赖项并使其@PostConstruct完成执行。

更新: 由于您在此处依赖Spring Lifecycle功能,您是否可以在A中实现Lifecycle并将JMS调用移至start()方法?