Каков порядок создания бинов Spring Boot и внедрения зависимостей? - PullRequest
0 голосов
/ 13 марта 2019

Я работал над проектом Spring Boot 1.5. У него был следующий тип класса конфигурации:

@Configurtion
public class Foo{

 @Autowired
 private DependencyA dependencyA;

 @Bean
 public DependencyA getDependency(){
   return new DependencyAImpl();
  }

}

Это нормально работало в Spring Boot 1.5, но когда я обновился до Spring Boot 2, это больше не работало, приложение не запускалось с исключением: «Не найден бин типа DependencyA». Я подумал, что это может быть потому, что бин не был создан, когда Spring пытался внедрить зависимость, и поэтому, как хак, добавил @Lazy к внедрению зависимости. Это сработало.

В свете этого, каков порядок выполнения класса конфигурации. Это: A) Сначала создайте bean-компоненты, а затем внедрите зависимости Б) Попробуйте создать экземпляр со всеми зависимостями, а затем создайте любые bean-компоненты в конфигурации.

1 Ответ

0 голосов
/ 13 марта 2019

Интересная находка;

Класс конфигурации также является Spring Bean.

Обычно класс конфигурации сначала сканируется и создается. Это должно быть отправной точкой, чтобы узнать о других конфигурациях и bean-компонентах.

Однако вы добавили @Autowire, чтобы сделать Field Injection. Как я уже сказал, класс конфигурации также является Spring Bean. Следовательно, весна должна сначала разрешить свои зависимости. И попал в тупик.

Чтобы ответить на ваш вопрос. Класс конфигурации становится первым, перед другими компонентами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...