我最新最全的文章都在南瓜慢说 www.pkslow.com,欢迎大家来喝茶!

1 简介

很多时间当一个Bean被创建出来后,我们希望做一些初始化操作,如初始化数据、缓存预热等。有以下三种方法:

  • 初始化方法initMethod
  • 注解@PostConstruct
  • InitializingBeanafterPropertiesSet方法

2 三种方法实现

先准备一个类用于测试,代码如下:

public class BeanLifeCheck implements InitializingBean {
private static final Logger logger = LoggerFactory.getLogger(BeanLifeCheck.class); @Value("${spring.application.name}")
private String applicationName; public BeanLifeCheck() {
logger.info("BeanLifeCheck: Construct " + applicationName);
} public void initMethod() {
logger.info("BeanLifeCheck: initMethod " + applicationName);
} @PostConstruct
public void postConstruct() {
logger.info("BeanLifeCheck: postConstruct " + applicationName);
} @PreDestroy
public void preDestroy() {
logger.info("BeanLifeCheck: preDestroy " + applicationName);
} @Override
public void afterPropertiesSet() throws Exception {
logger.info("BeanLifeCheck: afterPropertiesSet " + applicationName);
}
}

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 " + applicationName);
}

2.3 InitializingBean的afterPropertiesSet方法

需要类实现接口InitializingBean,如下:

@Override
public void afterPropertiesSet() throws Exception {
logger.info("BeanLifeCheck: afterPropertiesSet " + applicationName);
}

3 总结

运行后的执行日志及顺序如下:

2021-02-06 17:44:52.377: BeanLifeCheck: Construct null
2021-02-06 17:44:52.379: BeanLifeCheck: postConstruct Springboot-Common
2021-02-06 17:44:52.379: BeanLifeCheck: afterPropertiesSet Springboot-Common
2021-02-06 17:44:52.379: BeanLifeCheck: initMethod Springboot-Common
2021-02-06 17:45:10.347: BeanLifeCheck: preDestroy Springboot-Common

三种方法感觉区别不大,用哪个就看习惯了。

代码请查看:https://github.com/LarryDpk/pkslow-samples


欢迎关注微信公众号<南瓜慢说>,将持续为你更新...

多读书,多分享;多写作,多整理。

Bean初始化操作initMethod、@PostConstruct和InitializingBean的更多相关文章

  1. spring初始化bean时执行某些方法完成特定的初始化操作

    在项目中经常会在容器启动时,完成特定的初始化操作,如资源文件的加载等. 一 实现的方式有三种: 1.使用@PostConstruct注解,该注解作用于void方法上 2.在配置文件中配置init-me ...

  2. Spring InitializingBean init-method @PostConstruct 执行顺序

    Spring 容器中的 Bean 是有生命周期的,Spring 允许在 Bean 在初始化完成后以及 Bean 销毁前执行特定的操作,常用的设定方式有以下三种:   通过实现 Initializing ...

  3. Spring管理的bean初始化方法的三种方式,以及@PostConstruct不起作用的原因

    1:Spring 容器中的 Bean 是有生命周期的,spring 允许 Bean 在初始化完成后以及销毁前执行特定的操作.下面是常用的三种指定特定操作的方法: 通过实现InitializingBea ...

  4. 【Spring源码分析】非懒加载的单例Bean初始化前后的一些操作

    前言 之前两篇文章[Spring源码分析]非懒加载的单例Bean初始化过程(上篇)和[Spring源码分析]非懒加载的单例Bean初始化过程(下篇)比较详细地分析了非懒加载的单例Bean的初始化过程, ...

  5. Spring源码分析:非懒加载的单例Bean初始化前后的一些操作

    之前两篇文章Spring源码分析:非懒加载的单例Bean初始化过程(上)和Spring源码分析:非懒加载的单例Bean初始化过程(下)比较详细地分析了非懒加载的单例Bean的初始化过程,整个流程始于A ...

  6. spring扩展点之二:spring中关于bean初始化、销毁等使用汇总,ApplicationContextAware将ApplicationContext注入

    <spring扩展点之二:spring中关于bean初始化.销毁等使用汇总,ApplicationContextAware将ApplicationContext注入> <spring ...

  7. spring bean初始化顺序

    转载:http://blog.csdn.net/heyutao007/article/details/50326793 常用的设定方式有以下三种:通过实现 InitializingBean/Dispo ...

  8. Spring Bean初始化之后执行指定方法

    转: Spring Bean初始化之后执行指定方法 2017年07月31日 15:59:33 vircens 阅读数:24807   Spring Bean初始化之后执行指定方法 在运用Spring进 ...

  9. bean初始化和销毁的几种方式

    Bean生命周期 Bean创建 -->初始化 -->销毁 1.自定义Bean初始化 和销毁的方法 init-method和destroy-method 创建Bike类 public cla ...

随机推荐

  1. QFNU-11.08training

    7-1  阅览室 题目: 天梯图书阅览室请你编写一个简单的图书借阅统计程序.当读者借书时,管理员输入书号并按下S键,程序开始计时:当读者还书时,管理员输入书号并按下E键,程序结束计时.书号为不超过10 ...

  2. [Java] 数据分析--统计

    二项分布 需求:5个四面体筛子,筛子三面绿色,一面红色,模拟1000000次,统计每次试验红色落地筛子个数的分布 实现:用循环实现5个筛子和1000000次试验,定义函数numRedDown模拟5个筛 ...

  3. [Java]数据分析--数据可视化

    时间序列 需求:将一组字符顺序添加到时间序列中 实现:定义时间序列类TimeSeries,包含静态类Entry表示序列类中的各项,以及add,get,iterator,entry方法 TimeSeri ...

  4. 对Linux系统内核版本稳定性测试介绍

    对Linux系统内核版本稳定性测试介绍 在对 Linux 内核版本稳定性的测试中,需要明确地声明并证明为什么版本是稳定的或者是不稳定的. 然而还没有被证明和证实当前现有的系统范围内的压力测试可以测试 ...

  5. 获取显卡硬件信息lspci -vnn | grep VGA -A 12

    lspci -vnn | grep VGA -A 12 lshw -C display lshw -c video | grep configuration glxinfo | grep OpenGL ...

  6. 强哥JavaScript学习笔记

    js文件放header头最后,js代码放body体最后 js语言定位: js是基于对象的语言 php.java是面向对象的语言 定义变量: var str="hello world" ...

  7. 测usb读写

    dd if=/dev/sda of=/dev/null bs=1M count=1000每次测完 清一下 memory cacheecho 3 > /proc/sys/vm/drop_cache ...

  8. jmeter从安装到使用

    最近,项目需要做接口测试,在python和jmeter之前选择,最终还是选择jmeter,虽然脚本管理及持续集成方面有所不便,但胜在使用简单,调试方便,方便后续做并发压力测试,而且最后的报告统计图表也 ...

  9. [算法] 数据结构 splay(伸展树)解析

    前言 splay学了已经很久了,只不过一直没有总结,鸽了好久来写一篇总结. 先介绍 splay:亦称伸展树,为二叉搜索树的一种,部分操作能在 \(O( \log n)\) 内完成,如插入.查找.删除. ...

  10. Django中的中英文切换

    setting.py文件中 其中 zh-Hans是简体中文 zh-Hant是繁体中文 所以更改setttings.py 下 LANGUAGE_CODE = 'zh-Hans'即可 # 英文 LANGU ...