Kotlin-allopen et printemps
1. Vue d'ensemble
In Kotlin, all classes are final by default qui, au-delà de ses avantages évidents, peut être problématique dans les applications Spring. En termes simples, certaines zones au printemps ne fonctionnent qu'avec des classes non finales.
La solution naturelle consiste à ouvrir manuellement les classes Kotlin en utilisant le mot cléopen ou à utiliser le pluginkotlin-allopen - qui ouvre automatiquement toutes les classes nécessaires au fonctionnement de Spring.
2. Dépendances Maven
Commençons par ajouter la dépendanceKotlin-Allopen:
org.jetbrains.kotlin
kotlin-maven-allopen
1.1.4-3
Pour activer le plugin, nous devons configurer leskotlin-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. Installer
Considérons maintenantSimpleConfiguration.kt, une classe de configuration simple:
@Configuration
class SimpleConfiguration {
}
4. SansKotlin-Allopen
Si nous construisons notre projet sans le plugin, nous verrons 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 comprisKotlin-Allopen
L'ouverture de 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 peut être trouvéover on GitHub.