ZPY博客

关于SpringBoot里的@PostConstruct和BeanPostProcessor接口

这两天在项目里看到有用到一个@PostConstruct注解,这个注解没怎么见过,查了一下,发现说是在Bean实例化时会执行加了这个注解的函数。突然想起之前在SpringBoot里用到的BeanPostProcessor这个扩展接口,好像也是在Bean初始化时执行一些操作的。那么这两个有什么区别呢?

于是我同时加上@PostConstruct注解和实现BeanPostProcessor接口,并在相应的函数里加上打印log信息,最后控制台输出的结果表明,@PostConstruct函数会在BeanPostProcessor接口的postProcessBeforeInitialization函数之后,postProcessAfterInitialization函数之前执行。而且最大的区别是,BeanPostProcessor接口控制的是更宏观的东西,所有Bean的加载都会执行这个接口的方法,而@PostConstruct只会在你加的Bean里执行。也就是说,如果你想在加载所有Bean时执行一些东西,就用BeanPostProcessor接口,如果只想在加载某一个bean时执行就在该Bean里加上@PostConstruct注解即可。