コトリンアロッペンと春

1概要

  • Kotlin では、すべてのクラスはデフォルトで最終的なものとなっています** 、その明確な利点を超えて、Springアプリケーションでは問題になる可能性があります。簡単に言うと、Springのいくつかの分野は非最終クラスでしか機能しません。

自然な解決策は、 open キーワードを使用して手動でKotlinクラスを開くか、 kotlin-allopen プラグインを使用することです。これはSpringが機能するために必要なすべてのクラスを自動的に開きます。

2 Mavenの依存関係

Kotlin-Allopen 依存関係を追加することから始めましょう:

<dependency>
    <groupId>org.jetbrains.kotlin</groupId>
    <artifactId>kotlin-maven-allopen</artifactId>
    <version>1.1.4-3</version>
</dependency>

プラグインを有効にするには、buildセクションで kotlin-allopen を設定する必要があります。

<build>
   ...
  <plugins>
        ...
        <plugin>
            <artifactId>kotlin-maven-plugin</artifactId>
            <groupId>org.jetbrains.kotlin</groupId>
            <version>1.1.4-3</version>
            <configuration>
                <compilerPlugins>
                    <plugin>spring</plugin>
                </compilerPlugins>
                <jvmTarget>1.8</jvmTarget>
            </configuration>
            <executions>
                <execution>
                    <id>compile</id>
                    <phase>compile</phase>
                    <goals>
                        <goal>compile</goal>
                    </goals>
                </execution>
                <execution>
                    <id>test-compile</id>
                    <phase>test-compile</phase>
                    <goals>
                        <goal>test-compile</goal>
                    </goals>
                </execution>
            </executions>
            <dependencies>
                <dependency>
                    <groupId>org.jetbrains.kotlin</groupId>
                    <artifactId>kotlin-maven-allopen</artifactId>
                    <version>1.1.4-3</version>
                </dependency>
            </dependencies>
        </plugin>
    </plugins>
</build>

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 を含む

Springのためにすべてのクラスを開くことはあまり便利ではありません。プラグインを使用すると、必要なすべてのクラスが開かれます。

コンパイルされたクラスを見ると、次のことが明確にわかります。

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

6. 結論

この簡単な記事では、SpringとKotlinの「クラスが最終的ではない可能性がある」問題を解決する方法を説明しました。

この記事のソースコードはhttps://github.com/eugenp/tutorials/tree/master/spring-mvc-kotlin[over on GitHub]にあります。