Статьи

@SpringBootConfiguration Аннотация в Spring Boot

Аннотация @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, являются их собственными.