侧边栏壁纸
博主头像
Stars-One的杂货小窝博主等级

所有的创作都是有价值的

  • 累计撰写 257 篇文章
  • 累计创建 46 个标签
  • 累计收到 27 条评论

目 录CONTENT

文章目录

关于使用Kotlin开发SpringBoot项目使用@Transactional和@Autowired的报错问题

Stars-one
2023-04-04 / 0 评论 / 0 点赞 / 213 阅读 / 2428 字

问题描述

最近在开发一个订单模块,需要出现异常就会触发数据回滚操作,首先就是想到了Spring Boot提供的@Transactiona注解功能,但是使用的时候,发现其他方法就是出现了lateinit property xx has not been initialized的错误

代码如下:

@RequestMapping("/testPay")
@RestController
open class PayController {


    @Autowired
    lateinit var xnGoodService: XnGoodService
    
    @GetMapping("test")
    @ResponseBody
    fun test(): AjaxJson {
        
        //这里会报错!! lateinit property xnGoodService has not been initialized
        val good = xnGoodService.getById("62479fb79d6f461b92d80c")
        println(good)
      
        return AjaxJson.getSuccess()

    }
    
    @RequestMapping("confirmOrder")
    @ResponseBody
    @Transactional(rollbackFor = [Exception::class])
    open fun confirmOrder(@RequestBody json: String): String {
        ...
    }    
}    

解决方案

解决方法很简单,由于kotlin默认类都是final类型,当你要使用@Transactional注解,需要将当前类用open关键字声明,同时要将类里的所有方法都用open关键字声明

上面的test方法里就是因为没有open声明,才会导致报错了

参考

0

评论区