簡體   English   中英

Kotlin在春季自動接線

[英]Kotlin autowired in spring

我對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擴展中使用它們時,我會得到

lateinit property serviceX has not been initialized

即使沒有任何lateinit屬性,我仍然以某種方式得到此錯誤。

private var serviceX: ServiceX = ServiceX()

它仍然以某種方式未初始化,請幫助

不確定了解

當我嘗試從BaseRest擴展中使用它們時,我會得到

部分,但這是我遇到的代碼,它按預期工作正常。

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")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM