Не удалось инициализировать свойство со значением по умолчанию аннотации @Value в Kotlin - PullRequest
1 голос
/ 08 мая 2020

У меня есть свойство, которое содержит порт Redis в моем классе конфигурации Redis.

@Value("\${redis.port:63799}")
lateinit var port: Integer

init {
        this.redisServer = RedisServer(port.toInt())
    }

Когда я запускаю свой код, я получаю эту ошибку:

kotlin.UninitializedPropertyAccessException: lateinit property port has not been initialized

1 Ответ

0 голосов
/ 08 мая 2020

@Value аннотация обрабатывается после создания объекта.

Блок init является частью конструкции объекта (он является общим для всех ваших конструкторов).

Другими словами, вы слишком рано пытаетесь сослаться на внедренное свойство @Value.

Один из способов обойти это - каким-то образом отложить создание RedisServer, например:

  1. Используйте lazyinit для RedisServer.
  2. Используйте @PostConstruct в методе инициализации RedisServer.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...