Документация Spring для сканирования компонентов в сравнении с конфигурацией - PullRequest
0 голосов
/ 25 июня 2018

Я искал ответ на этот вопрос, но мое поисковое вуду, должно быть, немного не в порядке.

На работе я заметил, что есть предпочтение использовать Spring Configuration и @Beans для инициализации наших объектов Java,Хотя с этим подходом нет проблем, я подумал, что переключение на @Component (с ComponentScan) может

  1. Слегка упростить код
  2. Поместить нас в ряд схорошие весенние практики

Но, подумав об этом, у меня возникают проблемы с обоснованием, почему я считаю это хорошей практикой.Насколько я понимаю, @Bean полезен для инициализации устаревшего или не Springified кода.Это может побудить меня считать @Component хорошей практикой.

Преимущество подхода @Bean заключается в том, что он централизует инициализацию.Это немного легче понять, в отличие от @Component, который не так интуитивно понятен.

Есть ли у Spring хорошая документация о плюсах и минусах каждого подхода?Или руководство по этой теме?

1 Ответ

0 голосов
/ 25 июня 2018

@ Класс конфигурации с @ Bean-s внутри него называется «конфигурация на основе Java».И он более гибкий, чем «Конфигурация на основе аннотаций» (@Component).

Вполне допустимо иметь конфигурацию Java и сканирование аннотированных компонентов в одном проекте, поскольку они предназначены для разных целей.

@Component (@Service, @Repository и т. Д.) Используются для автоматического обнаружения и автоматической настройки bean-компонентов.

@ Аннотация Bean-компонента используется для явного объявления единственного bean-компонента вместо того, чтобы позволить Spring делать это автоматически.Вы можете предоставить больше настроек для создания экземпляра bean таким образом.

Вы можете сделать следующее с @Bean.Но это невозможно с @Component:

@Bean
public MyService myService(boolean someCondition) {
    if(someCondition) {
      return new MyServiceImpl1();
    } else {
        return new MyServiceImpl2();
    }
}
...