Котлин-Аллопен и Весна
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.