Метод с аннотацией @PostConstruct (javax) не вызывает - PullRequest
0 голосов
/ 04 октября 2019

Можно ли вызвать конкретный метод инициализации сразу после вызова конструктора, используя аннотации из javax?

Я поместил аннотацию @Inject (javax.inject.Inject) над полем, которое я хочу инициализировать в методе с помощью@PostConstruct аннотация (javax.annotation.PostConstruct) сразу после вызова конструктора, но этот метод init не вызывается и сбой NPE.

public class ClassChild extends ClassParent{

   @Inject
   private SomeService someService;


   @PostConstruct
   public void init(){

      someService = new SomeService(getSomeValues())  // getSomeValues() a method from parent
   }

Правильно ли я использую эти аннотации? В чем проблема? Как вызвать метод init () сразу после вызова конструктора ClassChild? Буду очень признателен за любую помощь!

Ответы [ 2 ]

2 голосов
/ 04 октября 2019

Ваш ClassChild не является управляемым объектом (например, @Component в Spring), поэтому ни @Inject, ни @PostConstruct не будут работать. Вы не должны вызывать конструктор, вам нужно инициализировать фреймворк ClassChild, после чего фреймворк также вызовет метод @PostConstruct.

1 голос
/ 04 октября 2019

Обратите внимание, что аннотации @PostConstruct и @PreDestroy являются частью Java EE. И поскольку Java EE устарела в Java 9 и удалена в Java 11, мы должны добавить дополнительную зависимость для использования этих аннотаций:

<dependency>
<groupId>javax.annotation</groupId>
<artifactId>javax.annotation-api</artifactId>
<version>1.3.2</version>
</dependency>

введите описание ссылки здесь

...