@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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM