1. Panoramica
In Kotlin , tutte le classi sono finali per impostazione predefinita , il che, al di là dei suoi chiari vantaggi, può essere problematico nelle applicazioni Spring. In poche parole, alcune aree in primavera funzionano solo con classi non finali.
La soluzione naturale è aprire manualmente le classi Kotlin utilizzando la parola chiave open o utilizzare il plugin kotlin-allopen , che apre automaticamente tutte le classi necessarie per il funzionamento di Spring.
2. Dipendenze di Maven
Cominciamo aggiungendo la dipendenza Kotlin-Allopen:
org.jetbrains.kotlin kotlin-maven-allopen 1.1.4-3
Per abilitare il plugin, dobbiamo configurare kotlin-allopen nella sezione build:
... ... 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. Configurazione
Consideriamo ora SimpleConfiguration.kt , una semplice classe di configurazione:
@Configuration class SimpleConfiguration { }
4. Senza Kotlin-Allopen
Se costruiamo il nostro progetto senza il plugin, vedremo ricevere il seguente messaggio di errore:
org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration problem: @Configuration class 'SimpleConfiguration' may not be final. Remove the final modifier to continue.
L'unico modo per risolverlo è aprirlo manualmente:
@Configuration open class SimpleConfiguration { }
5. Compreso Kotlin-Allopen
Aprire tutte le classi per la primavera non è molto comodo. Se usiamo il plugin, tutte le classi necessarie saranno aperte.
Possiamo vedere chiaramente che se guardiamo la classe compilata:
@Configuration public open class SimpleConfiguration public constructor() { }
6. Conclusione
In questo rapido articolo, abbiamo visto come risolvere il problema "la classe potrebbe non essere l'ultima" in Spring e Kotlin.
Il codice sorgente di questo articolo può essere trovato su GitHub.