大佬教程收集整理的这篇文章主要介绍了Spring Proxy Class和Kotlin中的空指针异常,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我和kotlin一起面临春天的问题.
我有一个控制器bean(没有接口btw),它通过主构造函数有一个自动连接的服务bean.
除非我为控制器使用缓存注释,否则它工作正常.显然,spring缓存会在引擎盖下生成一个代理类来处理缓存.
@RestController
@requestMapping("/regions/")
open class RegionController @Autowired constructor(val service: RegionservicE) {
@requestMapping("{iD}",method = arrayOf(requestMethod.GET))
@Cacheable(cachenames = arrayOf("regions"))
fun get(@PathVariable id: Long): Regionresource {
return this.service.get(id)
}
}
现在问题是在执行方法时出现空指针异常,实际上this.service为null,这在技术上是不可能的,因为它是kotlin中的非空变量.
我假设class proxies generated by spring用null值而不是autowired bean初始化类.这必须是使用kotlin和spring的常见陷阱.你是怎么绕过这个问题的?
对于代理库(CGLIB,javaassist)能够代理方法,必须将其声明为非final和非final类(since those libraries implement proxying by subclassing).将您的控制器方法更改为:
@requestMapping("{iD}",method = arrayOf(requestMethod.GET))
@Cacheable(cachenames = arrayOf("regions"))
open fun get(@PathVariable id: Long): Regionresource {
return this.service.get(id)
}
您可能会在控制台中看到有关RegionController方法不受代理约束的警告.
Kotlin团队承认了这一困难并创建了一个插件,标志着标准的AOP代理候选者,例如: @Component打开.
您可以在build.gradle中启用插件:
plugins {
id "org.jetbrains.kotlin.plugin.spring" version "1.1.60"
}
以上是大佬教程为你收集整理的Spring Proxy Class和Kotlin中的空指针异常全部内容,希望文章能够帮你解决Spring Proxy Class和Kotlin中的空指针异常所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。