1 问题形容
用 Kotlin
编写 Spring Boot
,在业务层中应用@Transactional
+@Autowired
时呈现如下谬误:
lateinit property dao has not been initialized
出错代码如下:
2 解决办法
因为 Kotlin
类默认是 final
的,加上 @Transactional
后编译器提醒须要open
:
然而加上 open
后没用,因而把 @Transactional
去掉后发现不会报错:
因而狐疑是 @Transactional
的问题,因为须要在类上加上open
,所以尝试性地在对应的办法下面也加上open
:
问题失去解决。
3 起因
因为 @Transactional
实际上是通过反射获取 Bean
的注解信息,利用 AOP
实现的,而在 Kotlin
中应用 AOP
须要在类或办法上加上open
。