Kotlin-allopen и Spring

1. Общ преглед

В Kotlin всички класове са окончателни по подразбиране, което освен очевидните му предимства може да бъде проблематично в приложенията на 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. Без Котлин-Алопен

Ако изградим нашия проект без приставката, ще видим следното съобщение за грешка:

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.

Изходният код за тази статия може да бъде намерен в GitHub.