Аннотация @SpringBootConfiguration в Spring Boot — это аннотация уровня класса, которая указывает, что этот класс обеспечивает конфигурацию приложения.
Как правило, класс с методом main () лучше всего подходит для этой аннотации.
Обычно мы используем аннотацию @SpringBootApplication, которая автоматически наследует аннотацию @SpringBootConfiguration .
Использование аннотации:
Когда мы помечаем класс с помощью @SpringBootConfiguration , это означает, что класс предоставляет методы определения @Bean . Контейнер Spring обрабатывает класс конфигурации для создания экземпляров и настройки bean-компонентов для нашего приложения.
Давайте посмотрим пример использования этой аннотации:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
|
@SpringBootConfiguration public class DemoApp { public static void main(String[] args) { SpringApplication.run(DemoApp. class , args); } @Bean public Course course() { return new Course(); } @Bean public Student student() { return new Student(); } } |
@Configuration vs @SpringBootConfiguration :
Согласно документации Spring, @SpringBootConfiguration является просто альтернативой стандартной аннотации @Configuration для Spring. Единственное различие между ними заключается в том, что @SpringBootConfiguration позволяет автоматически находить конфигурацию.
Это особенно полезно при написании тестов.
@SpringBootConfiguration vs @SpringBootApplication :
Как мы уже обсуждали ранее, аннотация @SpringBootApplication включает аннотацию @SpringBootConfiguration :
1
2
3
4
5
6
7
8
9
|
@Target (value=TYPE) @Retention (value=RUNTIME) @Documented @Inherited @SpringBootConfiguration @EnableAutoConfiguration @ComponentScan (excludeFilters={ @ComponentScan .Filter(type =CUSTOM,classes=TypeExcludeFilter. class )}) public @interface <span class = "memberNameLabel" >SpringBootApplication</span> |
Обычно мы используем только @SpringBootApplication, который, в свою очередь, включает другой.
Обратите внимание, что в нашем приложении рекомендуется использовать только одну аннотацию @SpringBootConfiguration или @SpringBootApplication .
IllegalStateException :: Невозможно найти @SpringBootConfiguration :
При написании тестовых примеров для нашего приложения Spring Boot, одним из распространенных исключений, с которыми мы сталкиваемся, является:
1
2
3
|
Unable to find a @SpringBootConfiguration , you need to use @ContextConfiguration or @SpringBootTest (classes=...) with your test java.lang.IllegalStateException |
Основная причина этого обычно заключается в том, что тестовые аннотации, такие как @DataJpaTest и некоторые другие, сначала ищут аннотацию @SpringBootConfiguration в текущем пакете. В случае, если он отсутствует в текущем пакете, они начинают искать иерархию пакетов, пока не найдут эту аннотацию.
Убедитесь, что ваши тестовые классы находятся либо в том же пакете, что и ваш класс, помеченный @SpringBootApplication, или хотя бы ниже в иерархии пакетов:
01
02
03
04
05
06
07
08
09
10
11
12
|
sample-app +--pom.xml +--src +--main +--com +--programmergirl +--Application.java +--test +--com +--programmergirl +--test +--SampleJpaTest.java |
Это должно решить эту проблему.
Вывод:
В этом мини-руководстве мы говорили об аннотации @SpringBootConfiguration . Мы также увидели, что @SpringBootApplication включает определение для @SpringBootConfiguration .
И мы сравнили стандартную Spring @Configuration с @SpringBootConfiguration .
У нас есть еще одна статья об основных аннотациях Spring, которая может помочь вам изучить некоторые общие аннотации, используемые в приложении Spring. Пожалуйста, не стесняйтесь исследовать, если вы чувствуете так.
Опубликовано на Java Code Geeks с разрешения Шубхры Шриваставы, партнера нашей программы JCG . Смотрите оригинальную статью здесь: @SpringBootConfiguration Аннотация в Spring Boot Мнения, высказанные участниками Java Code Geeks, являются их собственными. |