Ich habe Probleme mit der Spring Boot-Konfiguration.
Ich habe ein Basis-Spring-Boot-Projekt mit https://start.spring.io/ erstellt.
Und ich habe ein Problem, die Konfiguration funktioniert nur für Klassen im Unterkatalog:
Ich habe Annotation @ComponentScan ausprobiert, aber es hat nicht geholfen.
Hast du eine Idee, was ich damit machen kann?
Die Spring Boot-Dokumentation für @SpringBootApplication
states
Viele Spring Boot-Entwickler haben ihre Hauptklasse immer mit Anmerkungen versehen mit
@Configuration
,@EnableAutoConfiguration
und@ComponentScan
. Da diese Anmerkungen so häufig zusammen verwendet werden (insbesondere, wenn Sie die oben genannten bewährten Methoden befolgen), bietet Spring Boot eine bequeme@SpringBootApplication
alternative.Die Annotation
@SpringBootApplication
entspricht der Verwendung von@Configuration
,@EnableAutoConfiguration
und@ComponentScan
mit ihrer Standardattribute: [...]
wo der @ComponentScan
javadoc angibt
Wenn bestimmte Pakete nicht definiert sind, wird der Scan von .__ aus durchgeführt. Paket der Klasse, die diese Annotation deklariert.
Das heißt, nur die Typen, die sich in demselben Paket befinden wie ReadingListApplication
, werden gescannt.
Wenn Sie eine benutzerdefinierte Konfiguration wünschen, geben Sie Ihren eigenen @Configuration
, @EnableAutoConfiguration
und @ComponentScan
an.
Wenn Sie ein Spring boot
-Projekt einrichten, verwenden Sie Ihre Application-Klasse (die, die die @SpringBootApplication
-Annotation im Basispaket enthält.
Der @SpringBootApplication
führt unter anderem einen Komponentenscan durch. Es wird jedoch nur auf Unterpaketen geprüft. Wenn Sie diese Klasse in com.mypackage einfügen, wird sie nach allen Klassen in Unterpaketen, d. h. com.mypackage. *, suchen.
Wenn Sie dies nicht möchten, können Sie einer Klasse auch einen @ComponentScan
hinzufügen, der das Root-Paket angibt, d. H. @ComponentScan("com.mypackage")
.
Ich würde empfehlen, Sie haben ein Basispaket, dh 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:
Mit der @SpringBootApplication können Sie die Standardwerte der Komponentensuche überschreiben. Sie müssen es nur als Parameter einfügen:
@SpringBootApplication(scanBasePackages = "entertainment")
oder String Array:
@SpringBootApplication(scanBasePackages = {"entertainment", "readinglist"})
Ich hatte das gleiche Problem und zur Lösung dieses Problems habe ich meine Pakete so umbenannt.
"com.project"
dort können Sie Ihre SpringBootAplication-Hauptklasse platzieren und dann einfach die anderen Pakete erstellen, die mit "com.project" beginnen.
"com.project.dao"
"com.project.controller"
Beim Erstellen dieser Unterprojektstruktur müssen Sie scanBasePackages nicht in der @SpringBootApplication-Annotation verwenden. Dadurch kann Ihre Hauptklasse jede Komponente in Ihrem Projekt finden.
Falls Sie sich für scanBasePackages entschieden haben, denken Sie daran, dass Sie alle Ihre Komponentenpakete so einstellen müssen.
@SpringBootApplication (scanBasePackages = {"com.project.dao", "Com.project.controller"})