【发布时间】:2019-08-02 15:35:08
【问题描述】:
我对 kotlin 还很陌生,但之前做过一些广泛的 java...
我尝试在同一个项目中使用 kotlin 和 java,但它看起来很丑,我不喜欢我的类被分成两个地方。所以现在我的项目是 100% kotlin 有问题...
我不断收到此错误消息:
lateinit property serviceX has not been initialized
我明白这意味着服务还没有初始化,但是我该如何初始化呢?
使用 java 和 spring,我在构造函数中做了 @Autowired 或注入服务并完成了。
我需要让我的 REST 能够使用 serviceX
@Component
@Path("/super")
open class SuperRest : BaseRest() {
@PUT
@Path("/test")
fun putTest(
@Context securityContext: SecurityContext,
@NotNull selected: String
) {
val user = serviceX(securityContext)
}
}
在 BaseRest 中,我尝试自动装配 serviceX 首先是:
@Autowired
protected lateinit var serviceX: ServiceX
然后就是
@Autowired
lateint var serviceX: ServiceX
然后我尝试了在 SO 中找到的其他解决方案
open class BaseRest @Autowired constructor(
private val serviceX: ServiceX
) { ... }
这是为什么? 我仍然可以在休息时使用其他@autowired 服务。 就在我尝试从 BaseRest 扩展中使用它们时,我会得到 p>
lateinit property serviceX has not been initialized
即使没有任何 lateinit 属性,我仍然会以某种方式收到此错误..
private var serviceX: ServiceX = ServiceX()
它仍然不知何故没有初始化,请帮助
【问题讨论】:
-
能说明
serviceX的使用地点吗?您可能在注入之前访问它。谢谢 -
可能是因为您没有使用 Spring 而是使用 Jersey 来管理您的 rest 端点并且没有正确设置 Jersey/Spring 集成。