Kotlin-allopen e Spring

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.