带有注释@PostConstruct (javax) 的方法不调用
Method with annotation @PostConstruct (javax) doesn't call
是否可以在使用 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
}
我是否正确使用了这些注释?问题是什么?如何在调用 ClassChild 构造函数后立即调用 init() 方法?如果有任何帮助,我将不胜感激!
您的 ClassChild
不是托管对象(例如 Spring 中的 @Component
),因此 @Inject
和 @PostConstruct
都不起作用。您不应该调用构造函数,您需要让框架初始化 ClassChild
,之后框架还将调用 @PostConstruct
方法。
请注意,@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>
是否可以在使用 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
}
我是否正确使用了这些注释?问题是什么?如何在调用 ClassChild 构造函数后立即调用 init() 方法?如果有任何帮助,我将不胜感激!
您的 ClassChild
不是托管对象(例如 Spring 中的 @Component
),因此 @Inject
和 @PostConstruct
都不起作用。您不应该调用构造函数,您需要让框架初始化 ClassChild
,之后框架还将调用 @PostConstruct
方法。
请注意,@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>