Классы, аннотированные @Configuration, могут быть неявно разделены на подклассы и не должны быть окончательными - PullRequest
0 голосов
/ 20 октября 2019

Я создал новый проект на Kotlin для генерации отчета. Зная, что Kotlin может уменьшить количество строк кода и на безопаснее , чем Java, я использовал Spring-jpa и Kotlin, чтобы сделать это. Все мои @Configuration классы имели ошибку:

Классы, помеченные @Configuration, могут быть неявно разделены на подклассы и не должны быть окончательными

К вашему сведению, я использую проект mavenс котлином 1.3.50. Насколько я знаю, я знал, что весна делает подкласс для введения ценностей.

Как сделать весну счастливой, но не продолжать писать открыто в каждом классе, где весна жалуется?

1 Ответ

1 голос
/ 20 октября 2019

Как вы уже знаете, по умолчанию классы kotlin не могут быть расширены. Для поддержки наследования необходимо добавить ключевое слово open. Кроме того, мы знаем, что для обработки весенних аннотаций нужны классы, помеченные как @Configuration, которые могут быть разделены на подклассы.

Альтернатива написания открытого в каждом из классов - добавить плагин: kotlin-allopen

ex:

<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>

Приведенное выше описание позволяет добавить следующие примечания: @Component, @Async, @Transactional, @Cacheable и @SpringBootTest. Благодаря поддержке метааннотаций классы, помеченные @Configuration, @Controller, @RestController, @Service или @Repository, открываются автоматически, поскольку эти аннотации мета-аннотируются с помощью @Component.

Youможете найти документацию здесь: https://kotlinlang.org/docs/reference/compiler-plugins.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...