• @Transactional+@Autowired出现的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

  • 相关阅读:
    表单
    框架
    表格
    列表
    标签
    封装类(包装类)
    常见类 --Object
    日志
    异常
    选择结构
  • 原文地址:https://www.cnblogs.com/6b7b5fc3/p/13751639.html
Copyright © 2020-2023  润新知