Kotlin-allopen e Spring

Kotlin-allopen e Spring

1. Visão geral

In Kotlin, all classes are final by default que, além de suas vantagens claras, pode ser problemático em aplicativos Spring. Simplificando, algumas áreas do Spring funcionam apenas com aulas não finais.

A solução natural é abrir manualmente as classes Kotlin usando a palavra-chaveopen ou usar o plug-inkotlin-allopen - que abre automaticamente todas as classes necessárias para que o Spring funcione.

2. Dependências do Maven

Vamos começar adicionando a dependênciaKotlin-Allopen:


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

Para habilitar o plugin, precisamos configurarkotlin-allopen na seção de construção:


   ...
  
        ...
        
            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. Configuração

Agora vamos considerarSimpleConfiguration.kt, uma classe de configuração simples:

@Configuration
class SimpleConfiguration {
}

4. SemKotlin-Allopen

Se construirmos nosso projeto sem o plug-in, veremos a seguinte mensagem de erro:

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

A única maneira de resolvê-lo é abri-lo manualmente:

@Configuration
open class SimpleConfiguration {
}

5. IncluindoKotlin-Allopen

Abrir todas as aulas para o Spring não é muito útil. Se usarmos o plugin, todas as classes necessárias serão abertas.

Podemos ver claramente que, se olharmos para a classe compilada:

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

6. Conclusão

Neste artigo rápido, vimos como resolver o problema da "aula pode não ser final" em Spring e Kotlin.

O código-fonte deste artigo pode ser encontradoover on GitHub.