Konfiguration mit Annotation @SpringBootApplication

8

Ich habe ein Problem mit der Spring Boot-Konfiguration.

Ich habe ein Basis-Spring-Boot-Projekt mit Ссылка

erstellt

Und 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?

    
zaqpiotr 09.11.2015, 22:29
quelle

4 Antworten

31

Die Spring-Boot-Dokumentation für @SpringBootApplication gibt

an
  

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.

    
Sotirios Delimanolis 09.11.2015, 22:36
quelle
7

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?

    
Kabir 09.11.2015 22:40
quelle
4

Ü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"})

    
alvgarvilla 28.09.2016 12:43
quelle
0

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"})

    
Wesley Silva 24.09.2017 15:03
quelle

Tags und Links