Kotlin-allopen und Frühling

1. Übersicht

In Kotlin sind standardmäßig alle Klassen endgültig, was über seine klaren Vorteile hinaus in Spring-Anwendungen problematisch sein kann. Einfach ausgedrückt, einige Bereiche im Frühjahr funktionieren nur mit nicht abgeschlossenen Klassen.

Die natürliche Lösung besteht darin, Kotlin-Klassen manuell mit dem Schlüsselwort open zu öffnen oder das Plugin kotlin-allopen zu verwenden, mit dem automatisch alle Klassen geöffnet werden, die für die Arbeit von Spring erforderlich sind.

2. Maven-Abhängigkeiten

Beginnen wir mit dem Hinzufügen der Kotlin-Allopen-Abhängigkeit:

 org.jetbrains.kotlin kotlin-maven-allopen 1.1.4-3 

Um das Plugin zu aktivieren, müssen wir das kotlin-allopen im Build-Abschnitt konfigurieren :

 ...  ...  kotlin-maven-plugin org.jetbrains.kotlin 1.1.4-3   spring  1.8    compile compile  compile    test-compile test-compile  test-compile      org.jetbrains.kotlin kotlin-maven-allopen 1.1.4-3     

3. Setup

Betrachten wir nun SimpleConfiguration.kt , eine einfache Konfigurationsklasse:

@Configuration class SimpleConfiguration { }

4. Ohne Kotlin-Allopen

Wenn wir unser Projekt ohne das Plugin erstellen, wird die folgende Fehlermeldung angezeigt:

org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration problem: @Configuration class 'SimpleConfiguration' may not be final. Remove the final modifier to continue.

Die einzige Möglichkeit, das Problem zu lösen, besteht darin, es manuell zu öffnen:

@Configuration open class SimpleConfiguration { }

5. Einschließlich Kotlin-Allopen

Das Öffnen aller Klassen für den Frühling ist nicht sehr praktisch. Wenn wir das Plugin verwenden, sind alle notwendigen Klassen geöffnet.

Wir können das deutlich sehen, wenn wir uns die kompilierte Klasse ansehen:

@Configuration public open class SimpleConfiguration public constructor() { }

6. Fazit

In diesem kurzen Artikel haben wir gesehen, wie das Problem „Klasse ist möglicherweise nicht endgültig“ in Spring und Kotlin gelöst werden kann.

Der Quellcode für diesen Artikel finden Sie auf GitHub.