Cuando creamos una aplicación de arranque Spring, la anotamos con una @SpringBootApplicationanotación. Esta anotación 'resume' muchas otras anotaciones necesarias para que la aplicación funcione. Una de esas anotaciones es la @ComponentScananotación. Esta anotación le dice a Spring que busque componentes de Spring y configure la aplicación para que se ejecute.
Su clase de aplicación debe estar en la parte superior de la jerarquía de paquetes, para que Spring pueda escanear subpaquetes y descubrir los otros componentes necesarios.
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);
}
}
El siguiente fragmento de código funciona ya que el paquete del controlador está debajo del com.test.spring.bootpaquete
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!";
}
}
El siguiente fragmento de código NO funciona ya que el paquete del controlador NO está debajo del com.test.spring.bootpaquete
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!";
}
}
De la documentación de Spring Boot:
Muchos desarrolladores de Primavera de arranque siempre tienen su clase principal anotado con @Configuration, @EnableAutoConfigurationy @ComponentScan. Dado que estas anotaciones se usan juntas con tanta frecuencia (especialmente si sigue las mejores prácticas anteriores), Spring Boot proporciona una @SpringBootApplicationalternativa conveniente .
La @SpringBootApplicationanotación es equivalente a usar
@Configuration, @EnableAutoConfigurationy @ComponentScancon sus atributos predeterminados