Bean初始化操作initMethod、@PostConstruct和InitializingBean
2014 年 10 月 16 日
1 简介
很多时间当一个 Bean
被创建出来后,我们希望做一些初始化操作,如初始化数据、缓存预热等。有以下三种方法:
- 初始化方法
initMethod
- 注解
@PostConstruct
-
InitializingBean
的afterPropertiesSet
方法
2 三种方法实现
先准备一个类用于测试,代码如下:
import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.InitializingBean; import org.springframework.beans.factory.annotation.Value; import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; public class BeanLifeCheck implements InitializingBean { private static final Logger logger = LoggerFactory.getLogger(BeanLifeCheck.class); @Value("${pkslow.jwt.secretKey}") private String secretKey; public BeanLifeCheck() { logger.info("BeanLifeCheck: Construct " + secretKey); } public void initMethod() { logger.info("BeanLifeCheck: initMethod " + secretKey); } @PostConstruct public void postConstruct() { logger.info("BeanLifeCheck: postConstruct " + secretKey); } @PreDestroy public void preDestroy() { logger.info("BeanLifeCheck: preDestroy " + secretKey); } @Override public void afterPropertiesSet() throws Exception { logger.info("BeanLifeCheck: afterPropertiesSet " + secretKey); } }
2.1 初始化方法initMethod
这个以前是通过 xml
配置文件来定义的,现在可以直接定义在 @Bean
注解上,如下:
@Bean(initMethod = "initMethod") public BeanLifeCheck beanLifeCheck() { return new BeanLifeCheck(); }
2.2 注解@PostConstruct
直接在方法上加注解即可:
@PostConstruct public void postConstruct() { logger.info("BeanLifeCheck: postConstruct " + secretKey); }
2.3 InitializingBean的afterPropertiesSet方法
需要类实现接口 InitializingBean
,如下:
@Override public void afterPropertiesSet() throws Exception { logger.info("BeanLifeCheck: afterPropertiesSet " + secretKey); }
3 总结
运行后的执行日志及顺序如下:
2021-02-06 17:44:52.377: BeanLifeCheck: Construct null 2021-02-06 17:44:52.379: BeanLifeCheck: postConstruct my-key 2021-02-06 17:44:52.379: BeanLifeCheck: afterPropertiesSet my-key 2021-02-06 17:44:52.379: BeanLifeCheck: initMethod my-key 2021-02-06 17:45:10.347: BeanLifeCheck: preDestroy my-key
三种方法感觉区别不大,用哪个就看习惯了。
欢迎关注微信公众号< 南瓜慢说 >,将持续为你更新…