Когда мы создаем загрузочное приложение Spring, мы аннотируем его @SpringBootApplicationаннотациями. Эта аннотация «завершает» многие другие аннотации, необходимые для работы приложения. Одна из таких аннотаций - @ComponentScanаннотация. Эта аннотация сообщает Spring искать компоненты Spring и настраивать приложение для запуска.
Класс вашего приложения должен быть наверху иерархии пакетов, чтобы Spring мог сканировать подпакеты и находить другие необходимые компоненты.
package com.test.spring.boot;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class, args);
}
}
Ниже фрагмент кода работает, поскольку пакет контроллера находится в com.test.spring.bootпакете
package com.test.spring.boot.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HomeController {
@RequestMapping("/")
public String home(){
return "Hello World!";
}
}
Ниже фрагмент кода НЕ работает, поскольку пакет контроллера НЕ находится подcom.test.spring.boot пакетом
package com.test.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HomeController {
@RequestMapping("/")
public String home(){
return "Hello World!";
}
}
Из документации Spring Boot:
Многие разработчики Spring Загрузочного всегда имеют свой основной класс с аннотацией @Configuration, @EnableAutoConfigurationи@ComponentScan . Поскольку эти аннотации очень часто используются вместе (особенно если вы следуете приведенным выше рекомендациям), Spring Boot предоставляет удобную @SpringBootApplicationальтернативу.
@SpringBootApplicationАннотация эквивалентно использования
@Configuration, @EnableAutoConfigurationи @ComponentScanс их атрибутами по умолчанию