Котлин с электропроводкой весной - PullRequest
0 голосов
/ 12 марта 2019

Я довольно новичок в kotlin, но перед этим выполнил несколько расширенных java ...

Я пытался использовать kotlin и java в одном проекте, но это выглядело очень некрасиво, и мне не нравилось, что мои классы были разделены на две части. Так что теперь мой проект на 100% котлин и есть проблемы ...

Я получаю это сообщение об ошибке:

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 я попытался автоматически подключить сервис X во-первых, это было:

    @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()

все равно как-то не инициализируется, помогите пожалуйста

1 Ответ

0 голосов
/ 12 марта 2019

Не уверен, что понимаю

Как только я попытаюсь использовать их из расширения 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")?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...