Внедренный компонент не создается при использовании в переменной-члене - PullRequest
0 голосов
/ 12 июня 2019

Мой введенный EntityManager не запускается при использовании в переменной-члене. Когда я использую его внутри метода, он инициируется.

Является ли это проблемой, связанной с временем создания инжектированных бобов в целом? Или это только потому, что я использую quarkus и hibernate?

    @Inject
    EntityManager entityManager;

    private StudentFacade studentFacade = new StudentFacade(entityManager); //entityManager is null

Должна быть инициирована переменная entityManager, но она имеет нулевое значение.

Ответы [ 2 ]

1 голос
/ 12 июня 2019

Quarkus также поддерживает внедрение в конструктор, поэтому вы также можете сделать что-то вроде:

@Singleton
public class MyBean {

   final StudentFacade studentFacade;

   public MyBean(EntityManager entityManager) {
      this.studentFacade = new StudentFacade(entityManager);
   }

}
1 голос
/ 12 июня 2019

Проблема в том, что studentFacade инициализируется при построении того объекта, который содержит entityManage, но любой каркас, который вы используете для DI, внедряет entityManager только после создания объекта.

То есть при инициализации studentFacade поле - entityManager по-прежнему равно нулю.

Чтобы решить эту проблему, вы можете отложить инициализацию переменной studentFacade до момента внедрения.Обычно это достигается с помощью некоторых хуков жизненного цикла, таких как:

@PostConstruct
public void onConstruct() {
    studentFacade = new StudentFacade(entityManager);
}

Пример приведен для среды Spring, но я предполагаю, что почти те же правила применяются ко всему, что вы используете.

...