Използвам Spring 3.0.2. Имам две сравнително прости дефиниции на боб. Единият има @PostConstruct (компонент 'A'), който задейства верига от събития, за които @DependsOn bean (компонент 'B') трябва да бъде подготвен. Изглежда обаче, въпреки че казах, че зърното „A“ зависи от зърното „B“, събитията (методите на жизнения цикъл) на зърното „A“ се изпълняват преди зърното „B“ да бъде напълно инициализирано.
Заявяването, че bean е "зависим" чрез @DependsOn (или по този въпрос, зависи от дефиницията на 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();
Погледнах пролетния източник и isActive е настроен на true след метода за инициализация (doInitialized е завършен). IsRunning се задава след завършване на doStart. doStart се задейства от DefaultLifecycleProcessor, който се появява след извикването на анотираните методи @PostConstruct.
Как мога да гарантирам, че моят метод Postconstruct се извиква СЛЕД като bean b е инициализиран И стартиран?