Я особенно новичок в 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
}
}