Kotlin-allopen et Spring

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.