spring - Nulls 使用 @Configuration 和 @Bean 与 spring boot 和 kotlin
问题描述
我正在使用Spring boot 2.3.1和Kotlin 1.3.72。几天前我已经更新了它。从那一刻起,我就遇到了依赖注入的问题。我不使用@Service
等@Component
注释,我更喜欢按@Configuration
类创建 bean,所以例如我有这种配置:
@Configuration
open class MatchModule {
@Bean
open fun matchFacade(
matchQueryService: MatchQueryService,
purchaseFacade: PurchaseFacade,
rankFacade: RankFacade,
timeService: TimeService
): MatchFacade {
return MatchFacade(
timeService = timeService,
matchQueryService = matchQueryService,
purchaseFacade = purchaseFacade,
rankFacade = rankFacade
)
}
@Bean
open fun matchQueryService(sparringViewRepository: SparringViewRepository, animalProfileMatchViewRepository: AnimalProfileMatchViewRepository): MatchQueryService {
return MatchQueryService(sparringViewRepository, animalProfileMatchViewRepository)
}
}
有MatchFacade
一个事务方法,其中所有依赖项都是null
. 我知道我可以通过代理制作所有外观和方法open
,CGLIB
但我有标准的 spring boot 构建配置pom.xml
:
<build>
<sourceDirectory>${project.basedir}/src/main/kotlin</sourceDirectory>
<testSourceDirectory>${project.basedir}/src/test/kotlin</testSourceDirectory>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-maven-plugin</artifactId>
<configuration>
<args>
<arg>-Xjsr305=strict</arg>
</args>
<compilerPlugins>
<plugin>spring</plugin>
</compilerPlugins>
</configuration>
<dependencies>
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-maven-allopen</artifactId>
<version>${kotlin.version}</version>
</dependency>
</dependencies>
</plugin>
<plugin>
<artifactId>kotlin-maven-plugin</artifactId>
<groupId>org.jetbrains.kotlin</groupId>
<version>${kotlin.version}</version>
<configuration>
<compilerPlugins>
<plugin>jpa</plugin>
</compilerPlugins>
<jvmTarget>1.8</jvmTarget>
</configuration>
<dependencies>
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-maven-noarg</artifactId>
<version>${kotlin.version}</version>
</dependency>
</dependencies>
<!--...-->
</plugin>
</plugins>
</build>
为什么它在没有开放类和方法的情况下不起作用?
解决方案
这是 Spring 的工作解决方案,我认为这compilerPlugins
是一个缺失的部分
<plugin>
<artifactId>kotlin-maven-plugin</artifactId>
<groupId>org.jetbrains.kotlin</groupId>
<version>${kotlin.version}</version>
<configuration>
<compilerPlugins>
<plugin>spring</plugin>
<plugin>jpa</plugin>
</compilerPlugins>
<jvmTarget>${java.version}</jvmTarget>
<args>-java-parameters</args>
</configuration>
<executions>
<execution>
<id>compile</id>
<phase>process-sources</phase>
<goals>
<goal>compile</goal>
</goals>
</execution>
<execution>
<id>test-compile</id>
<phase>process-test-sources</phase>
<goals>
<goal>test-compile</goal>
</goals>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-maven-allopen</artifactId>
<version>${kotlin.version}</version>
</dependency>
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-maven-noarg</artifactId>
<version>${kotlin.version}</version>
</dependency>
</dependencies>
</plugin>
推荐阅读
- python - Plotly:如何使用 plotly express 显示时间序列数据的趋势线?
- c# - 实体框架/Linq 不知道反序列化对象?
- shell - hashcorp 打包器 shell 配置程序中的 sed 命令失败
- database - 如何将odoo的postgreSQL数据库恢复到谷歌云?
- node.js - 返回异步函数以表达路由器
- python - 如何正确合并数据框?
- javascript - 创建一个 For 循环来找到适当除数的总和
- regex - 如何将原始字符串传递给 Zsh 中的变量?
- google-cloud-platform - 读取 datadog.yaml 文件的权限被拒绝
- c# - WPF 模板。模板选择器没有收到项目