Cuando creamos una aplicación de arranque Spring, la anotamos con una @SpringBootApplication
anotación. Esta anotación 'resume' muchas otras anotaciones necesarias para que la aplicación funcione. Una de esas anotaciones es la @ComponentScan
anotació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.boot
paquete
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.boot
paquete
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
, @EnableAutoConfiguration
y @ComponentScan
. Dado que estas anotaciones se usan juntas con tanta frecuencia (especialmente si sigue las mejores prácticas anteriores), Spring Boot proporciona una @SpringBootApplication
alternativa conveniente .
La @SpringBootApplication
anotación es equivalente a usar
@Configuration
, @EnableAutoConfiguration
y @ComponentScan
con sus atributos predeterminados