乐趣区

关于spring:lateinit-property-xx-has-not-been-initialized错误

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

退出移动版