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