带有注释@PostConstruct(javax)的方法不会调用

时间:2019-10-04 10:25:16

标签: java dependency-injection postconstruct

使用javax的注释调用构造函数后,是否可以立即调用特定的初始化方法?

在构造函数被调用之后,我将@Inject注释(javax.inject.Inject)放在要在带有@PostConstruct注释(javax.annotation.PostConstruct)的方法中初始化的字段上,但这初始化方法未调用,NPE崩溃。

public class ClassChild extends ClassParent{

   @Inject
   private SomeService someService;


   @PostConstruct
   public void init(){

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

我正确使用这些注释吗?问题是什么?如何在调用ClassChild构造函数后立即调用init()方法?我将不胜感激!

2 个答案:

答案 0 :(得分:2)

您的ClassChild不是托管对象(例如Spring中的@Component),因此@Inject@PostConstruct都不起作用。您不应该调用构造函数,需要使框架初始化ClassChild,然后框架也将调用@PostConstruct方法。

答案 1 :(得分:1)

请注意,@ 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>

enter link description here