4.1 为什么要使用@PostConstruct?| Java Debug 笔记

本文正在参加「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
喜欢就支持一下吧
点赞0 分享