Почему Spring Класс загрузочного приложения должен иметь аннотацию @Configuration?
Я изучаю Spring Framework, но я не могу понять, что именно означает аннотация @Configuration
и какие классы должны быть аннотированы так. В документах Spring Boot сказано, что класс Application должен быть @Configuration
class.
Spring Загрузка поддерживает конфигурацию на основе Java. Хотя возможно для вызова SpringApplication.run() с источником XML, мы обычно рекомендуется, чтобы ваш основной источник был классом @Configuration.
Попытка узнать о @Configuration
Я нахожу, что аннотирование класса с помощью @Configuration
означает, что класс может использоваться контейнером IoC Spring как источник определений bean.
Если это так, то каким образом этот класс приложения является источником определений bean?
@SpringBootApplication // same as @Configuration @EnableAutoConfiguration @ComponentScan
public class App
{
public static void main(String[] args) throws Exception {
SpringApplication.run(App.class, args);
}
}
В основном я понял большинство других основных понятий относительно Spring, но я не могу понять цель @Configuration
или какие классы должны быть @Configuration
классами? Может кому-то помочь. Спасибо!
Ответы
Ответ 1
Вы поняли это правильно.
@Configuration
@Configuration
является аналогом для xml файла. Такие классы являются источниками определения bean, определяя методы с аннотацией @Bean
.
@Configuration
:
- не требуется, если вы уже передали аннотированный класс в параметре
sources
при вызове метода SpringApplication.run()
;
- требуется, если вы не передаете аннотированный класс явно, но он находится в пакете, указанном в аннотации
@ComponentScan
вашего основного класса конфигурации.
Для удобства чтения классы, которые явно передаются как sources
, могут быть аннотированы с помощью @Configuration
- только для того, чтобы показать намерения более четко.
Ваш текущий класс на самом деле не является источником определений bean, потому что он его не имеет, но если бы у вас были @Bean
аннотированные методы, Spring увидит их.
@EnableAutoConfiguratiom
Может использоваться с или без @Configuration
. Он сообщает Spring настроить некоторую базовую инфраструктуру, судя по тому, что у вас есть в пути к классам. Это делается путем вызова так называемого класса импорта, который получен из значения аннотации @Import
, которое включает @EnableAutoConfiguration
. Только один класс должен быть аннотирован с помощью @EnableAutoConfiguration
, дублирование его не делает ничего.
Этот ответ также может быть полезен для понимания процесса инициализации загрузки Spring: Какой фрагмент кода в Spring Загрузка фактически регистрирует сервлет диспетчера для SpringMVC?
Ответ 2
Я думаю, что основная причина, почему Spring Загрузка @SpringBootApplication
аннотации автоматически применяется @Configuration
- это позволить добавлять определения bean в тот же класс. Одна из основных целей Spring Boot - позволить вам быстро создавать приложение и без дополнительных движений. Поэтому, позволяя добавлять определения bean прямо в класс приложения, вам не нужно создавать дополнительные классы для хранения вашей конфигурации. У вас всего 1 класс и что он.