Сообщение об ошибке может быть подсказкой о том, что JVM не смогла создать экземпляр UserBean
.Следующее предположение является некоторым предположением и должно быть доказано:
Внедрение зависимости требует инжектора зависимости, инструмента, который вводит экземпляр UserService
в UserBean
.В вашем коде вы уже используете этот внедренный экземпляр при создании экземпляра bean-компонента: вы вызываете внедренный сервис в конструкторе.
Если , инжектор зависимостей начинает свою работу после bean создан, затем вызов службы внутри конструктора вызовет NullPointerException
(потому что service
все еще null
в это время).Это стоит проверить, попытавшись на мгновение поймать NPE в конструкторе UserBean
.Если вы поймете один - voilà - инжектор зависимостей начнет работать после создания компонента, и, как следствие, мы не сможем использовать внедренные сервисы во время создания класса (= в конструкторе)
Обходной путьидея: реализовать небольшой вспомогательный класс поставщика услуг - внутренний класс может работать:
public class UserBean implements Serializable {
static class UserServiceProvider {
@Inject static UserService service;
}
// ...
public UserBean() {
this.user = UserServiceProvider.service.findUser("kaas");
}
// ...
}
Не проверено, но может работать - служба должна быть внедрена в классе поставщика до того, как вы будете использовать ее вконструктор бобов.