我最新最全的文章都在南瓜慢说 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. Linux USB ECM Gadget 驱动介绍

    ​1 USB ECM介绍 USB ECM,属于USB-IF定义的CDC(Communication Device Class)下的一个子类:Ethernet Networking Control Mo ...

  2. [bug] Hive:map.xml could only be replicated to 0 nodes instead of minReplication (=1). There are 0 datanode(s) running and no node(s) are excluded in this operation.

    原因: datanode未运行,重启hdfs

  3. canal 实现Mysql到Elasticsearch实时增量同步

    简介: MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品.MySQL是一种关系数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据 ...

  4. jolokia配置Java监控

    wget http://search.maven.org/remotecontent?filepath=org/jolokia/jolokia-jvm/1.3.6/jolokia-jvm-1.3.6- ...

  5. Jenkins——安装部署

    1.部署Jdk 由于jenkins需要jdk环境,所以先部署jdk,解压并设置环境变量就行: # tar zxf jdk-8u45-linux-x64.tar.gz # mv jdk-8u45-lin ...

  6. 2.socket编程

    套接字:进行网络通信的一种手段socket 1.流式套接字(SOCK_STREAM):传输层基于tcp协议进行通信 2.数据报套接字(SOCK_DGRAM):传输层基于udp协议进行通信 3.原始套接 ...

  7. keil使用VScode外部编辑器

    1.首先我们双击桌面的keil图标,打开keil主界面: 2.点击上方菜单栏的Tools菜单,选择如下图所示的选项: 3.点击如下图所示的菜单上红笔标注的地方,给这个工具命名为vscode: 4.然后 ...

  8. SpringMVC Web 相对路径与绝对路径

    基本概念 绝对路径 绝对路径就是你的主页上的文件或目录在硬盘上真正的路径,(URL和物理路径) 例如: C:\xyz\test.txt 代表了 test.txt 文件的绝对路径. http://www ...

  9. MyBatis 各种参数传递方式

    MyBatis参数传递方式 情况一:Mapper映射器接口方法参数只有一个且为基本类型 接口方法: public List<UserEntity> selectUserByAge(int ...

  10. 修改mysql中数据库存储主路径

    一.首先把mysql的服务先停掉. 二.更改MySQL配置文件My.ini中的数据库存储主路径 打开文件夹C:\ProgramData\MySQL\MySQL Server 5.7中的my.ini文件 ...