本文正在参加「Java主题月 – Java Debug笔记活动」,详情查看<活动链接>
提问:为什么要使用@PostConstruct?
在管理Bean中,@PostConstruct是在常规Java对象构造函数之后调用的。
为什么我要使用@PostConstructbean进行初始化而不是常规构造函数本身?
回答1:
因为在调用构造函数时,bean尚未初始化-即未注入任何依赖项。在该@PostConstruct方法中,bean已完全初始化,您可以使用依赖项。
因为这是保证在bean生命周期中仅调用一次此方法的协定。可能会发生(尽管不太可能)容器在其内部工作中多次实例化bean,但它保证@PostConstruct仅将其调用一次。
PostConstruct批注用于需要依赖注入完成以执行任何初始化之后要执行的方法上。在类投入使用之前,必须调用此方法。所有支持依赖注入的类都必须支持该注释。
JSR-250第1章。2.5 javax.annotation.PostConstruct
举个例子
public class Foo {
@Inject
Logger LOG;
@PostConstruct
public void fooInit(){
LOG.info("This will be printed; LOG has already been injected");
}
public Foo() {
LOG.info("This will NOT be printed, LOG is still null");
// NullPointerException will be thrown here
}
}
复制代码
重要信息: @PostConstruct以及@PreDestroy 已在Java 11中完全删除。
为了继续使用它们,您需要将javax.annotation-api JAR添加到您的依赖项中。
在maven中使用如下方式
<!-- https://mvnrepository.com/artifact/javax.annotation/javax.annotation-api -->
<dependency>
<groupId>javax.annotation</groupId>
<artifactId>javax.annotation-api</artifactId>
<version>1.3.2</version>
</dependency>
复制代码
在Gradle中使用如下方式
// https://mvnrepository.com/artifact/javax.annotation/javax.annotation-api
compile group: 'javax.annotation', name: 'javax.annotation-api', version: '1.3.2'
复制代码
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END