Котлин-Аллопен и Весна

Котлин-Аллопен и Весна

1. обзор

In Kotlin, all classes are final by default, что, помимо очевидных преимуществ, может быть проблематичным в приложениях Spring. Проще говоря, некоторые области в Spring работают только с нефинальными классами.

Естественное решение - вручную открывать классы Kotlin с помощью ключевого словаopen или использовать плагинkotlin-allopen, который автоматически открывает все классы, необходимые для работы Spring.

2. Maven Зависимости

Начнем с добавления зависимостиKotlin-Allopen:


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

Чтобы включить плагин, нам нужно настроитьkotlin-allopen в разделе сборки:


   ...
  
        ...
        
            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. Настроить

Теперь давайте рассмотримSimpleConfiguration.kt, простой класс конфигурации:

@Configuration
class SimpleConfiguration {
}

4. БезKotlin-Allopen

Если мы создадим наш проект без подключаемого модуля, мы увидим следующее сообщение об ошибке:

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

Единственный способ решить это - открыть его вручную:

@Configuration
open class SimpleConfiguration {
}

5. ВключаяKotlin-Allopen

Открытие всех классов для весны не очень удобно. Если мы используем плагин, все необходимые классы будут открыты.

Мы можем ясно видеть это, если мы посмотрим на скомпилированный класс:

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

6. Заключение

В этой быстрой статье мы увидели, как решить проблему «класс может не быть окончательным» в Spring и Kotlin.

Исходный код этой статьи можно найти вover on GitHub.