我正在使用 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
代理,我可以将所有的Facade和方法都设为CGLIB
,但是我在pom.xml
中有标准的Spring Boot构建配置:
<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>
为什么在没有打开类和方法的情况下不起作用?