Quando creiamo un'applicazione Spring boot, la annotiamo con @SpringBootApplication
annotation. Questa annotazione "racchiude" molte altre annotazioni necessarie affinché l'applicazione funzioni. Una di queste annotazioni è l' @ComponentScan
annotazione. Questa annotazione dice a Spring di cercare i componenti di Spring e di configurare l'applicazione per l'esecuzione.
La classe dell'applicazione deve essere in cima alla gerarchia dei pacchetti, in modo che Spring possa eseguire la scansione dei sotto-pacchetti e trovare gli altri componenti richiesti.
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);
}
}
Lo snippet di codice riportato di seguito funziona poiché il pacchetto del controller è in com.test.spring.boot
package
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!";
}
}
Il frammento di codice riportato di seguito NON funziona poiché il pacchetto del controller NON è incluso nel com.test.spring.boot
pacchetto
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!";
}
}
Dalla documentazione di Spring Boot:
Molti sviluppatori Spring Boot hanno sempre la loro classe principale annotata con @Configuration
, @EnableAutoConfiguration
e @ComponentScan
. Poiché queste annotazioni sono così spesso utilizzate insieme (soprattutto se segui le migliori pratiche sopra), Spring Boot fornisce una comoda @SpringBootApplication
alternativa.
L' @SpringBootApplication
annotazione è equivalente ad usare
@Configuration
, @EnableAutoConfiguration
e @ComponentScan
con i loro attributi di default