首页 > 解决方案 > 使用 @Configuration 注释的类可以隐式子类化,并且不能是最终的

问题描述

我在 Kotlin 上创建了一个新项目来生成报告。知道 Kotlin 可以减少代码行数并且比 Java更安全,我使用 Spring-jpa 和 Kotlin 来完成这项工作。我所有的@Configuration课程都有一个错误:

使用 @Configuration 注释的类可以隐式子类化,并且不能是最终的

仅供参考,我正在使用带有 Kotlin 1.3.50 的 maven 项目。据我所知,我知道 spring 确实是用于注入值的子类。

我如何让春天快乐,但在春天抱怨的每一节课上都不保持写作开放?

标签: kotlin

解决方案


您可能已经知道,默认情况下无法扩展 kotlin 类。为了支持继承,你必须添加open关键字。此外,我们知道 Spring 注释处理需要标记为@Configuration可以子类化的类。

在每个类中编写 open 的替代方法是添加一个插件:kotlin-allopen

前任 :

<plugin>
    <groupId>org.jetbrains.kotlin</groupId>
    <artifactId>kotlin-maven-plugin</artifactId>
    <version>${kotlin.version}</version>
    <configuration>
        <compilerPlugins>
            <plugin>spring</plugin>
        </compilerPlugins>
    </configuration>
    <dependencies>
        <dependency>
            <groupId>org.jetbrains.kotlin</groupId>
            <artifactId>kotlin-maven-allopen</artifactId>
            <version>${kotlin.version}</version>
        </dependency>
    </dependencies>
    <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>
</plugin>




<compilerPlugins>
    <plugin>spring</plugin>
</compilerPlugins>

上面的方法是将 open 添加到以下注释中:@Component@Async@Transactional和. 由于元注释支持用, ,或注释的类,因为这些注释是用 元注释的。@Cacheable@SpringBootTest@Configuration@Controller@RestController@Service@Repository@Component

您可以在此处找到文档: https ://kotlinlang.org/docs/reference/compiler-plugins.html


推荐阅读