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
。