【问题标题】:Kotlin autowired in springKotlin 在春季自动装配
【发布时间】: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 集成。

标签: java spring kotlin


【解决方案1】:

不太清楚

当我尝试从 BaseRest 扩展中使用它们时,我会得到 ​​p>

部分,但这是我遇到的代码,它按预期工作。

open class BaseRest {
  @Autowired
  protected lateinit var serviceX: ServiceX

  fun baseFun() {
      serviceX.serviceFun(SecurityContextImpl())
  }
}

@Component
open class SuperRest : BaseRest() {

  fun putTest(
    securityContext: SecurityContext,
    @NotNull selected: String
  ) {
    baseFun()
    val user = serviceX.serviceFun(securityContext)
  }
}

额外问题:为什么使用@PUT and @Path("/test") 注释而不是@PutMapping("/test")

【讨论】:

  • 对不起,不能让它工作,即使有这个..仍然没有初始化
  • 好的,所以您需要提供更多上下文。例如,您的 pom.xml Spring 依赖项,以及更多关于“当我尝试从 BaseRest 扩展中使用它们时”的信息。另外,正如@m-deinum 提到的那样,您真的使用 Spring 来管理您的 REST 端点还是其他什么?那些@PUT and @Path 似乎很可疑。
猜你喜欢
  • 2017-12-13
  • 1970-01-01
  • 2015-12-11
  • 1970-01-01
  • 1970-01-01
  • 2013-04-26
  • 1970-01-01
  • 2013-10-22
  • 2015-01-24
相关资源
最近更新 更多