Bean的生命周期行为控制,初始化与销毁bean时执行操作的三种方法

  • 一、实现Spring的接口
  • 二、XML配置中使用 init-method和destory-method
  • 三、使用@PostConstruct和@PreDestroy注解
  • 三种方法混合使用时的执行顺序
  • 注解实践

一、实现Spring的接口

通过实现InitializingBean和DisposableBean接口可以让容器来管理bean的生命周期。
弊端是这些接口使我们自己编写的代码与Spring API产生了耦合。

调用afterPropertiesSet( )后允许bean在初始化时执行一些操作
调用destroy( )前允许bean在销毁时执行一些操作

初始化的具体代码:

<bean id="exampleInitBean" class="examples.ExampleBean"/>
public class ExampleBean implements InitializingBean {@Overridepublic void afterPropertiesSet() throws Exception {//...}
}

销毁的具体代码:

<bean id="exampleInitBean" class="examples.ExampleBean"/>
public class ExampleBean implements DisposableBean {@Overridepublic void destroy() throws Exception {//...}
}

二、XML配置中使用 init-method和destory-method

在基于XML的配置元数据上,使用init-method、destory-method属性指定一个没有参数的方法。

初始化的具体代码:

<bean id="exampleInitBean" class="examples.ExampleBean" init-method="init"/>
public class ExampleBean {public void init() {//...}
}

销毁的具体代码:

<bean id="exampleInitBean" class="examples.ExampleBean" destroy-method="destroy"/>
public class ExampleBean {public void destroy() {//...}
}

三、使用@PostConstruct和@PreDestroy注解

使用这两种注解是当前Spring应用生命周期回调的最佳实践,且这些bean不会耦合在Spring特定的接口上。

初始化的具体代码:

@Component
public class ExampleBean {@PostConstructpublic void init() {//...}
}

销毁的具体代码:

@Component
public class ExampleBean {@PreDestroypublic void destroy() {//...}
}

三种方法混合使用时的执行顺序

初始化:

  1. 包含@PostConstruct注解的方法。
  2. 在InitializingBean接口中的afterPropertiesSet( )方法。
  3. 自定义的init( )方法。

销毁:

  1. 包含@PreDestroy注解的方法。
  2. 在DisposableBean接口中的destroy( )方法。
  3. 自定义的destroy( )方法。

注解实践

  1. ExampleBean类中使用@PostConstruct初始化时给age赋值为2 。
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;@Component
public class ExampleBean {public int age;@PostConstructpublic void init() {this.age = 2;}
}
  1. 在Test中注入ExampleBean,获取age的值并打印。
import ch.qos.logback.classic.Logger;
import com.yaos.common.util.LoggerBuilder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;@Component
public class Test {private static final Logger LOGGER = LoggerBuilder.getLogger(Test.class);private int age;@Autowiredpublic void setAge(ExampleBean exampleBean) {this.age = exampleBean.age;}public void print() {LOGGER.info("初始化age: " + age);}
}
  1. 控制台日志截图

Bean的生命周期行为控制,初始化与销毁bean时执行操作的三种方法相关推荐

  1. Bean的生命周期——init-method和destroy-method - 通过让Bean实现InitializingBean,DisposableBean--BeanPostProcessor

    * bean的生命周期: * bean创建---初始化----销毁的过程 * 容器管理bean的生命周期: * 我们可以自定义初始化和销毁方法:容器在bean进行到当前生命周期的时候来调用我们自定义的 ...

  2. vue生命周期(created,mounted具体用于哪些场景)、三种存储的区别

    vue生命周期 什么是生命周期呢,就好像是人有生老病死一样,vue组件也有从创建到消亡的一系列过程.这个过程就叫做vue的生命周期 vue的生命周期可分为三大阶段,每个阶段都有对应的函数,叫做钩子,又 ...

  3. 带你读懂Spring Bean 的生命周期,嘿,就是玩儿~

    带你读懂Spring Bean 的生命周期,嘿,就是玩儿~ 一.前言 今天我们来说一说 Spring Bean 的生命周期,小伙伴们应该在面试中经常遇到,这是正常现象.因为 Spring Bean 的 ...

  4. Spring 中 Bean 的生命周期

    本文作者: 伯乐在线 - yemengying 智商捉鸡?,实在没办法一下子理解Spring IoC和AOP的实现原理,看的闹心也不太懂,所以...决定拆成小的不能在小的一个个问题,一点点啃.今天先来 ...

  5. 【Spring】Bean的生命周期

    Spring Bean是Spring应用中最最重要的部分了.所以来看看Spring容器在初始化一个bean的时候会做那些事情,顺序是怎样的,在容器关闭的时候,又会做哪些事情. 示例代码 git地址: ...

  6. Spring Bean的生命周期(详细)

    Bean 生命周期的整个执行过程描述如下. 1)根据配置情况调用 Bean 构造方法或工厂方法实例化 Bean. 2)利用依赖注入完成 Bean 中所有属性值的配置注入. 3)如果 Bean 实现了 ...

  7. IOC操作Bean管理XML方式(bean 的生命周期)

    目录 IOC操作Bean管理XML方式(bean 的生命周期) 1.bean 的生命周期(在单例模式下的生命周期) (1)通过构造器创建 bean 的实例(执行类中无参构造方法去创建对象) (2)为 ...

  8. 面试问题:Spring中Bean 的生命周期

    Spring Bean生命周期执行流程 在传统的 Java 应用中,Bean 的生命周期很简单,使用关键字 new 实例化 Bean,当不需要该 Bean 时,由 Java 自动进行垃圾回收. Spr ...

  9. 框架源码专题:springIOC的加载过程,bean的生命周期,结合spring源码分析

    文章目录 1.BeanFactory和ApplicationContext的区别? 2. IOC与 Bean的加载过程 ①:初始化容器DefaultListableBeanFactory ②:创建读取 ...

最新文章

  1. shell脚本中常见的一些特殊符号和作用详解
  2. Kubernetes使用Jenkins服务器存储所有的kube.config文件
  3. 转-测试用例-常用控件
  4. Asp.Net中的正则表达式问题可以在此提问,今后大家一起研究!贴出基本语法参考...
  5. char、int、long、float、double等在64位下占多少字节
  6. centos7 小图标_Centos7 桌面图标设置
  7. calibre转换电子书格式教程
  8. FastDDS(9)Security安全性
  9. python实现动态规划0-1背包问题
  10. Java后台生成多个Excel并用Zip打包后(可以将excel文件放置到不同的目录)下载
  11. 你现在无法访问 blog.csdn.net,因为网站使用的是 hsts。网络错误和攻击通常是暂时
  12. 【genius_platform软件平台开发】第二十八讲:NEON指令集优化(附实例)
  13. a除以b的编程怎么写C语言,输入a,b两个整数,编程求出a除以b得到的商和余数.c语言...
  14. bk650不支持服务器系统,Nas好伴侣,BK650m-ch2。兼容Unraid解决办法
  15. java单精度浮点_Java 浮点数的范围和精度
  16. Laravel框架实战Web框架教程
  17. 大数据学完能干什么,大数据就业方向有哪些
  18. 学术搜索地图中机构自动展示-----------吴岳
  19. 【源码】物理信息神经网络设计与仿真
  20. npm ERR code ENOENT npm ERR syscall open 错误解决

热门文章

  1. 后门狂奔者reper.exe专杀
  2. web服务器、应用服务器、web应用框架
  3. 十六进制转八进制(浅显易懂)
  4. linux mysql 查看缓存_详解MySQL查询缓存
  5. 贪嗔痴(三毒)戒定慧(三学)
  6. 任务进度更新:3月21日-4月10日 脚本编程、组装调试,套奶牛游戏初步完成
  7. 小知识:linux中的./configure --prefix和--host的作用
  8. C# SpinLock实现
  9. 华为手机恢复出厂设置出现com.android.phone,如何在华为手机中恢复出厂设置?怎么在华为手机中一键还原?...
  10. Wondershare PDFelement 8 Pro Mac(PDF编辑工具)