Ich habe ein Problem mit der Spring Boot-Konfiguration.
Ich habe ein Basis-Spring-Boot-Projekt mit Ссылка
erstelltUnd ich habe ein Problem, Konfiguration funktioniert nur für Klassen im Unterkatalog:
Ich habe Annotation @ComponentScan versucht, aber es hat nicht geholfen.
Haben Sie eine Idee, was ich damit machen kann?
Die Spring-Boot-Dokumentation für @SpringBootApplication
gibt
Viele Spring Boot Entwickler haben immer ihre Hauptklasse kommentiert mit
@Configuration
,@EnableAutoConfiguration
und@ComponentScan
. Da diese Annotationen häufig zusammen verwendet werden (insbesondere wenn Sie folgen den Best Practices oben), Spring Boot bietet eine bequemer@SpringBootApplication
Alternative.Die
@SpringBootApplication
Annotation entspricht der Verwendung@Configuration
,@EnableAutoConfiguration
und@ComponentScan
mit ihren Standardattribute : [...]
wo die @ComponentScan
Javadoc gibt an
Wenn bestimmte Pakete nicht definiert sind, erfolgt das Scannen von Paket der Klasse, die diese Annotation deklariert.
Das heißt, nur die Typen, die sich im selben Paket befinden wie Ihr ReadingListApplication
, werden gescannt.
Wenn Sie eine benutzerdefinierte Konfiguration wünschen, geben Sie je nach Bedarf Ihre eigenen @Configuration
, @EnableAutoConfiguration
und @ComponentScan
an.
Wenn Sie ein Spring boot
-Projekt einrichten, haben Sie Ihre Application-Klasse (diejenige, die die @SpringBootApplication
-Anmerkung im Basispaket enthält.
Eines der Dinge, die das @SpringBootApplication
tut, ist ein Komponentenscan. Es werden jedoch nur Unterpakete gescannt. Wenn Sie diese Klasse in com.mypackage einfügen, sucht sie nach allen Klassen in Unterpaketen, d. h. com.mypackage. *.
Wenn Sie dies nicht tun möchten, können Sie auch eine @ComponentScan
zu einer Klasse hinzufügen, die das Root-Paket angibt, d. h. @ComponentScan("com.mypackage")
Ich würde empfehlen, dass Sie ein Basispaket haben, d. h. com.mypackage . Und innerhalb dieser Pakete haben Sie Ihre Unterpakete. Haben Sie eine Klasse mit dem @SpringBootApplication
in diesem Basispaket?
Überprüfung der Spring-Dokumentation:
Sie können mit der @SpringBootApplication die Standardwerte für den Komponentenscan überschreiben. Sie müssen es nur als Parameter angeben:
@SpringBootApplication(scanBasePackages = "entertainment")
oder String-Array:
@SpringBootApplication(scanBasePackages = {"entertainment", "readinglist"})
Ich hatte das gleiche Problem und um es zu lösen, habe ich meine Pakete so umbenannt.
"com.project"
Dort können Sie Ihre SpringBootApplication-Hauptklasse platzieren und dann einfach die anderen Pakete erstellen, die mit "com.project" beginnen
"com.project.dao"
"com.project.controller"
Wenn Sie diese Unterprojektstruktur erstellen, müssen Sie in @SpringBootApplication Annotation keine scanBasePackages verwenden. Dadurch kann Ihre Hauptklasse jede Komponente in Ihrem Projekt finden.
Und falls Sie sich dafür entschieden haben, scanBasePackages zu verwenden, denken Sie daran, dass Sie alle Ihre Komponentenpakete so einstellen müssen.
@ SpringBootApplication (scanBasePackages = {"com.project.dao", "com.project.controller"})
Tags und Links java gradle spring spring-boot