Ich kenne die Java-basierten Konfigurationsoptionen von Springs, einschließlich der Verwendung von @Component
und @Configuration
in Verbindung mit @Bean
-Anmerkungen zur Registrierung von Spring-Beans.
Wenn Sie jedoch ein Projekt mit anständiger Größe in Spring umwandeln, kann es sehr arbeitsintensiv sein, systematisch alle Klassen im Projekt zu bearbeiten und mit @Configuration
@Bean
s zu aktualisieren oder jede Klasse mit @Component
zu kommentieren. Wir haben ein großes Groovy-Projekt, das konvertiert werden soll, und ich möchte den Prozess vereinfachen.
Meine Frage: Gibt es im Frühjahr eine Funktion, die es Spring ermöglicht, alle gültigen Bean-Kandidatenklassen innerhalb eines bestimmten Pakets automatisch zu konfigurieren?
Wenn nicht, welche anderen Optionen sind verfügbar?
ClassPathBeanDefinitionScanner
ist alles was Sie brauchen.
Sie können benutzerdefinierte Logik im Include-Filter übergeben, wenn Sie möchten. In der aktuellen Version wird jede Klasse im bereitgestellten Paket als Bean enthalten sein.
Aber es ist unmöglich, automatisch eine richtige Abhängigkeitsstruktur für Ihre Klassen zu erstellen, es hängt wirklich vom gewünschten Umfang ab. Sie müssen es mit Ihren Händen tun.
Ich würde fast dasselbe tun wie Roman, nur würde ich es zur Build-Zeit, nicht zur Laufzeit, mit Code-Generierung machen. Der Grund dafür ist, dass ich magischerweise mag, dass die Magie zur Erstellungszeit passiert, bis zur Magie, die während der Bereitstellungszeit passiert.
Schreiben Sie in der einfachsten Version eine Hauptmethode, die das Paket scannt (anstelle von Reflexionen api verwende ich Guava ) s ClassPath-Scanner) und erstellt für jede gefundene Klasse eine @Bean
-Methode.
Für die Code-Generierung würde ich JCodeModel verwenden:
%Vor%Sie können versuchen, Ihre eigene zu verwenden BeanDefinitionRegistryPostProcessor
%Vor%Siehe Beispielprojekt in Ссылка
Auf die Gefahr hin, primitiv zu klingen, warum nicht einfach eine einfache Suche durchführen und in Ihrer IDE ersetzen (z. B. nach "public class" in einem Paket suchen und durch "@Component public class" ersetzen)? Das sollte viel schneller sein als der Versuch, irgendetwas programmatisch zu machen.
Tags und Links java spring dependency-injection groovy spring-boot