【发布时间】:2016-09-22 17:51:15
【问题描述】:
我在将 kotlin 与 spring 结合使用时遇到了一些问题。
我有一个控制器 bean(顺便说一句没有接口),它通过主构造函数有一个自动连接的服务 bean。
除非我为控制器使用缓存注释,否则它工作得很好。显然 springs 缓存会在后台生成一个代理类来处理缓存。
我的代码如下所示:
@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 使用空值而不是自动装配的 bean 来初始化类。这一定是使用 kotlin 和 spring 的常见陷阱。你是如何规避这个问题的?
【问题讨论】:
标签: spring spring-mvc kotlin