Означает ли аннотирование боба @Dependson, что зависимый боб будет создан или инициализирован?

StackOverflow https://stackoverflow.com/questions/8822712

  •  27-10-2019
  •  | 
  •  

Вопрос

Я использую Spring 3.0.2. У меня есть два относительно простых определения бобов. У одного есть @postconstruct (bean 'a'), который запускает цепочку событий, к которой должен быть подготовлен боб @dependson (Bean 'B'). Тем не менее, кажется, что, несмотря на то, что я заявил, что бобовый «A» зависит от бобов «B», события (методы жизненного цикла) бобов «A» работают до того, как Bean 'B' полностью инициализируются.

Зависит ли утверждение, что боб «зависит» через @Dependson (или, в этом отношении, зависит от определения бобов), что методы жизненного цикла зависимых бобов будут завершены перед бобом, который зависит от упомянутого боба?

Будут ли методы жизненного цикла Bean 'B' заполнены до фасоли "A"?

ОБНОВИТЬ

Bean A - это пользовательский класс, который использует шаблон JMS для отправки сообщения, объявляющего о том, что он инициализировал.

Получатель указанного сообщения обрабатывает его и направляет его конфигурацию в MessageListingNingContainer (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 инъекцию бобов B плюс две операторы журнала:

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

Я посмотрел на источник пружины, и ISactive устанавливается на True после метода инициализации (DoInitialized завершен). Isrunning установлен после завершения достарта. Достарт запускается дефолтным проходом, который происходит после того, как называются аннотированные методы @postconstruct.

Как я могу гарантировать, что мой метод Post -Construct вызывается после того, как Bean B был инициализирован и запущен?

Это было полезно?

Решение

В вашем конкретном случае @PostConstruct Метод бобов А не будет вызван, пока В не будет полностью инициализирован, т.е. все его зависимости вводятся и его @PostConstruct Заканчивает выполнение.

Обновлено: Поскольку вы полагаетесь на функциональность жизненного цикла весеннего цикла, можете ли вы реализовать Lifecycle в и перемещайте ваш JMS start() Метод там?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top