jad(v)a ha scritto:
Il metodo main è in StudentApplication.java, ossia:
package config;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class StudentApplication {
public static void main(String[] args) {
SpringApplication.run(StudentApplication.class, args);
}
}
jad(v)a ha scritto:
come esempio sto prendendo l'esempio che si trova su questo link:
https://www.javatpoint.com/angular-spring-crud-exampl
Allora, qui c'è una questione da chiarire (e che devi precisare). Hai anche una classe di "configurazione" (@Configuration) simile/uguale a quella nell'esempio oppure no?
La questione è questa: tutte le classi annotate @Controller, @Service, ecc.. vengono "pescate" in generale da Spring Framework/Boot tramite il meccanismo del classpath scanning.
In Spring Boot, in modo specifico, per
default (quindi senza specificare/cambiare nulla) il classpath scanning parte dal package (incluso) della classe main che ha @SpringBootApplication andando verso tutti i
sottopackage.
Generalmente si tende (molto) a sfruttare questo comportamento predefinito (è quello che faccio anche io solitamente). Si stabilisce un package principale e poi si fanno i sottopackage per controller, service, ecc...
Es.
it.andbin.nomeappxyz.ClasseMain
it.andbin.nomeappxyz.controller.AbcController
.....
it.andbin.nomeappxyz.service.AbcService
.....
ecc...
Vedi che
controller e
service sono "sotto" quello principale (it.andbin.nomeappxyz). Quindi il classpath scanning pesca tutto quello che ci può essere nel package it.andbin.nomeappxyz e in più anche in tutti i sottopackage.
Se si struttura, volutamente, la applicazione in maniera diversa, questo default può non essere più applicabile e quindi serve il @ComponentScans e/o @ComponentScan .
L'esempio a quel link, oltre a non seguire questo approccio predefinito, complica solo le cose e utilizza pure package che sono ben poco "qualificati" ...
In quell'esempio si è dovuto usare @ComponentScans/@ComponentScan perché i package Controller, DAO ecc... NON sono "sotto" config che è dove sta la classe main.