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

8 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之前完成?

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方法?

mre*_*isz 1

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

更新:由于您在这里依赖 Spring Lifecycle 功能,您可以Lifecycle在 A 中实现并将 JMS 调用移至start()那里的方法吗?