我和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的常见陷阱.你是怎么绕过这个问题的?