Kotlin-allopen et printemps

1. Vue d'ensemble

Dans Kotlin , toutes les classes sont finales par défaut, ce qui, au-delà de ses avantages évidents, peut être problématique dans les applications Spring. En termes simples, certaines zones de Spring ne fonctionnent qu'avec des classes non finales.

La solution naturelle consiste à ouvrir manuellement les classes Kotlin à l'aide du mot-clé open ou à utiliser le plugin kotlin-allopen - qui ouvre automatiquement toutes les classes nécessaires au fonctionnement de Spring.

2. Dépendances de Maven

Commençons par ajouter la dépendance Kotlin-Allopen:

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

Pour activer le plugin, nous devons configurer le kotlin-allopen dans la section 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. Configuration

Considérons maintenant SimpleConfiguration.kt , une classe de configuration simple:

@Configuration class SimpleConfiguration { }

4. Sans Kotlin-Allopen

Si nous construisons notre projet sans le plugin, nous verrons obtenir le message d'erreur suivant:

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

La seule façon de le résoudre est de l'ouvrir manuellement:

@Configuration open class SimpleConfiguration { }

5. Y compris Kotlin-Allopen

Ouvrir toutes les classes pour le printemps n'est pas très pratique. Si nous utilisons le plugin, toutes les classes nécessaires seront ouvertes.

Nous pouvons clairement voir que si nous regardons la classe compilée:

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

6. Conclusion

Dans cet article rapide, nous avons vu comment résoudre le problème «la classe peut ne pas être définitive» dans Spring et Kotlin.

Le code source de cet article se trouve à l'adresse over sur GitHub.