Свойство Lateinit не инициализировано "FindByIndexNameSessionRepository" - PullRequest
0 голосов
/ 27 февраля 2020

Я особенно новичок в Spring Boot и Hibernate, у меня возникли проблемы с lateinit в приведенном ниже коде.

Чтобы дать вам простой обзор, я реализую простой перехватчик Hibernate для onSave , Поэтому каждый раз, когда Admin изменяет определенный User в дБ и сохраняет его. Событие onSave будет запущено. Затем в основном проверяется, имеет ли entity тип user, затем регистрирует сущность и находит entity.username в журнале SessionRepository, если найден id.

Каждый раз, когда я обрабатываю this.sessions.findByPrincipalName(user).values в searchByPrincipalName у меня есть исключение, что sessions не был инициализирован.

Мое понимание lateinit таково, что при использовании объекта он будет инициализирован.

Возможно, я пропускаю что-то? или я неправильно понял концепцию?

код:

@Component
class UserChangeInterceptor: EmptyInterceptor() {

    @Autowired
    private lateinit var sessions: FindByIndexNameSessionRepository<out Session>

    val logger = loggerFor<UserChangeInterceptor>()

    override fun onSave(
        entity: Any?,
        id: Serializable?,
        state: Array<out Any>?,
        propertyNames: Array<out String>?,
        types: Array<out Type>?
    ): Boolean {
        if (entity is User) {
            logger.info("UserChangeInterceptor::onSave $entity")
            searchByPrincipalName(entity.username).forEach {
                logger.info("UserChangeInterceptor::onSave -> ${it.id}")
            }
        }
        return super.onSave(entity, id, state, propertyNames, types)
    }

    private fun searchByPrincipalName(user: String): MutableCollection<out Session> {
        return this.sessions.findByPrincipalName(user).values
    }
}
...