Подтвердить что ты не робот

Каково ожидаемое поведение @PostConstruct в классах @Configuration?

Мы повторно используем проект, который определяет его beans с spring java-config (используя @Configuration), и в одном из таких классов он имеет метод @PostConstruct init.

Каково ожидаемое поведение здесь - когда этот метод вызывается? Что касается beans, то есть. То есть этот метод ведет себя точно так, как если бы класс конфигурации был bean (и на самом деле он один?)

Мы наблюдаем, что в зависимости от операционной системы он может быть вызван до того, как beans, которые являются @Autowired в классе конфигурации, инициализируются и, таким образом, он заканчивает работу с неполными зависимостями.

4b9b3361

Ответ 1

Даже для @Configuration, @PostConstruct ведет себя как ожидалось - он вызывается после ввода зависимостей класса. Хотя это немного запутывает (вместе с тем, что @Configuration классы beans), это правильно.

Проблема заключалась в скрытой циклической зависимости, введенной с помощью spring -security-oauth - это запутанный набор конфигураций, выходящий за рамки этого обсуждения.

Итак, @PostConstruct можно вызвать, если зависимый beans не полностью инициализирован только в случае круговых зависимостей. Если зависимости передаются с помощью установщика или вставки в поле, циркулярная зависимость не сообщается, а вместо этого используется неполное beans.

Также следует отметить, что, по-видимому, циклическая обработка зависимостей зависит от ОС (что означает некоторые различия JVM или JRE).