2022更文挑战5-Spring生命周期注解之@PostConstruct

222 阅读2分钟

「这是我参与2022首次更文挑战的第5天,活动详情查看:2022首次更文挑战」。

Spring生命周期注解之@PostConstruct

前文

在通常的开发过程中,经常会遇到这样的一种问题:在程序启动时需要进行数据的初始化设置。而在springboot的框架应用场景下,也有这样的一个注解@PostConstruct。这个注解会在bean加载的过程中,落后于构造函数执行,因此也就可以达到该目的。

具体内容

The PostConstruct annotation is used on a method that needs to be executed
after dependency injection is done to perform any initialization. 

正如该注解在源码中的描述一样,这个注解需要作用在方法上,而这个方法要在初始化的依赖全部注入后执行。也就是说,该注解所对应的执行顺序是指在所有的依赖全部加载后执行,同时在构造方法执行后进行执行。下面简单来看一个示例:

@Component
public class PostUtil {
    @Autowired
    ProductService productService;

    public PostUtil() {
        System.out.println("构造方法初始化");
        System.out.println(productService == null);
    }

    @PostConstruct
    public void init(){
        System.out.println("@PostConstruct注解初始化");
        System.out.println(productService == null);
    }
}

这段示例代码的执行结果如下所示。首先可以看到构造函数会优先执行,此时注入的内容还没有成功注入。然后紧接着该注解修饰的方法会进行执行,此时注入的内容已经被执行完毕。如执行结果可见,此时 注入的内容已经可以正常执行,也就是可以继续下一步的初始化工作。

image.png 同时,上述的执行结果也就解释了可能存在的疑问:为什么我们要使用该注解,而不是直接在bean初始化阶段直接进行所需要的预处理操作。初始化阶段注入的内容并没有处理完成,直接在构造函数初始化阶段操作,会存在空指针的问题导致程序执行异常。而上述注解充分考虑了这个问题,因此要采用这个方案。

后记

  • 千古兴亡多少事?悠悠。不尽长江滚滚流。