Quando criamos um aplicativo de inicialização do Spring, fazemos anotações nele @SpringBootApplication
. Esta anotação 'envolve' muitas outras anotações necessárias para o aplicativo funcionar. Uma dessas anotações é @ComponentScan
anotação. Esta anotação diz ao Spring para procurar componentes Spring e configurar o aplicativo para rodar.
Sua classe de aplicativo precisa estar no topo da sua hierarquia de pacotes, para que o Spring possa escanear subpacotes e descobrir os outros componentes necessários.
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);
}
}
O trecho de código abaixo funciona porque o pacote do controlador está sob o com.test.spring.boot
pacote
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!";
}
}
O snippet de código abaixo NÃO funciona porque o pacote do controlador NÃO está no com.test.spring.boot
pacote
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!";
}
}
Da documentação do Spring Boot:
Muitos desenvolvedores do Spring Boot sempre têm sua classe principal anotada com @Configuration
, @EnableAutoConfiguration
e @ComponentScan
. Uma vez que essas anotações são frequentemente usadas juntas (especialmente se você seguir as práticas recomendadas acima), Spring Boot oferece uma @SpringBootApplication
alternativa conveniente .
A @SpringBootApplication
anotação é equivalente a usar
@Configuration
, @EnableAutoConfiguration
e @ComponentScan
com os seus atributos padrão