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.