2017-08-29 3 views
2

Bei https://github.com/spring-projects/spring-framework/blob/master/spring-context/src/main/kotlin/org/springframework/context/support/BeanDefinitionDsl.kt der Kommentar zeigt, wie Spring Beans über die neue "Functional Bean Definition Kotlin DSL" zu definieren. Ich fand auch https://github.com/sdeleuze/spring-kotlin-functional. In diesem Beispiel wird jedoch nur plain Spring und nicht Spring Boot verwendet. Irgendein Hinweis, wie man das DSL zusammen mit Frühling Boot benutzt, wird geschätzt.Wie funktioniert "Functional Bean Definition Kotlin DSL" mit Spring Boot und Spring WebFlux?

+0

Haben Sie es gerade ausprobiert, z. indem Sie diese Bean-Definition in einen Controller einfügen (der im Spring-Boot-Modus entdeckt wird)? – guenhter

+1

Ja, ich habe versucht eine '@ Configuration' Klasse mit einer' @ Bean' Methode, die das Ergebnis von 'beans {...}' zurückgibt. Dann bekam ich die Ausnahme '" ... Keine qualifizierende Bean vom Typ '...' verfügbar ... "', wenn ich '@ Service' lösche und die Serviceklasse im obigen' bohnen {...} 'Lambda deklariere . –

Antwort

7

Spring Boot basiert auf Java Config, sollte aber experimentelle Unterstützung von benutzerdefinierten functional bean declaration DSL über ApplicationContextInitializer Unterstützung wie beschrieben here ermöglichen.

In der Praxis sollten Sie in der Lage sein, Ihre Beans zum Beispiel in einer Beans.kt Datei zu deklarieren, die eine beans() Funktion enthält.

fun beans() = beans { 
    // Define your bean with Kotlin DSL here 
} 

Dann, um es in Rechnung durch Stiefel genommen, wenn main() und Tests ausgeführt wird, erstellen Sie eine ApplicationContextInitializer Klasse wie folgt:

class BeansInitializer : ApplicationContextInitializer<GenericApplicationContext> { 

    override fun initialize(context: GenericApplicationContext) = 
     beans().initialize(context) 

} 

Und schließlich erklären diese initializer in Ihrer application.properties Datei:

context.initializer.classes=com.example.BeansInitializer 

Sie ein vollständiges Beispiel here finden und können auch this issue folgen über dedizierte Spring Boot-Unterstützung für die Registrierung funktionaler Bohnen.

+0

Zwei Fragen zu Ihrer Antwort: * Diese Initialisierung wird vom Test-Setup mit einem 'SpringRunner' mit JUnit aufgenommen, oder? * Gibt es eine andere Möglichkeit, dieses Verhalten zu haben, ohne 'Eigenschaften'-Dateien erstellen zu müssen, einschließlich dieser Initialisierung, die bei Tests aufgenommen wird? Danke! –

Verwandte Themen