使用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()方法?我将不胜感激!
答案 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>