InitializingBean顾名思义,应该是初始化Bean相关的接口。

先看一下该接口都定义了哪些方法:

  1. public interface InitializingBean {
  2. void afterPropertiesSet() throws Exception;
  3. }

看方法名,应该是在读完Properties文件,之后执行的方法,不是很了解,先写个bean测试一下。

  • 首先声明一个Bean
  1. package com.github.jettyrun.springinterface.demo.initializingbean;
  2.  
  3. import org.springframework.beans.factory.InitializingBean;
  4.  
  5. /**
  6. * Created by jetty on 18/1/31.
  7. */
  8. public class InitBean implements InitializingBean{
  9.  
  10. public void afterPropertiesSet() throws Exception {
  11. System.out.println("init-afterPropertiesSet()");
  12. }
  13.  
  14. public void test(){
  15. System.out.println("init-test()");
  16. }
  17. }
  • 然后用Spring管理,初始化一个Bean
  1. <bean id="initBean" class="com.github.jettyrun.springinterface.demo.initializingbean.InitBean"></bean>
  • 加载一下上下文
  1. public static void main(String[] args) {
  2. ApplicationContext applicationContext=new ClassPathXmlApplicationContext("classpath:application-usertag.xml");
  3. }
  • 运行结果
  1. init-afterPropertiesSet()

我们能看到,在spring在初始化initBean的时候,调用了afterPropertiesSet方法,也就是说 spring在初始化实现了InitializingBean接口的bean的时候,会执行afterPropertiesSet()方法。

我们也知道,在spring初始化bean的时候,可以配置beaninit-method属性,在initBean上添加一个试试。

配置如下:

  1. <bean id="initBean" init-method="test" class="com.github.jettyrun.springinterface.demo.initializingbean.InitBean"></bean>

加载一下上下文得到运行结果:

  1. init-afterPropertiesSet()
  2. init-test()

我们看到,在初始化bean的过程中,先调用了 afterPropertiesSet()方法,然后执行init-method定义的方法。

也就是说springbean提供了两种初始化的方式,第一种实现InitializingBean接口,实现afterPropertiesSet方法,第二种配置文件中通过init-method指定,两种方式可以同时使用,同时使用先调用afterPropertiesSet方法,后执行init-method指定的方法。

DisposableBean接口又是干嘛的,看一下接口定义:

  1. public interface DisposableBean {
  2. void destroy() throws Exception;
  3. }

只定义了一个方法,destroy,看名字应该是对象在销毁时执行的,给上面的InitBean也实现一下DisposableBean接口,代码如下:

  1. public class InitBean implements InitializingBean,DisposableBean {
  2. public void destroy() throws Exception {
  3. System.out.println("destroy");
  4.  
  5. }
  6.  
  7. public void afterPropertiesSet() throws Exception {
  8. System.out.println("init-afterPropertiesSet()");
  9. }
  10.  
  11. public void test(){
  12. System.out.println("init-test()");
  13. }

再运行一下main方法:

  1. public class Main {
  2.  
  3. public static void main(String[] args) {
  4. AbstractApplicationContext applicationContext=new ClassPathXmlApplicationContext("classpath:application-usertag.xml");
  5. // InitBean initBean=(InitBean)applicationContext.getBean("initBean");
  6. System.out.println("init-success");
  7. applicationContext.registerShutdownHook();
  8. }
  9. }

执行结果:

  1. init-afterPropertiesSet()
  2. init-test()
  3. init-success
  4. destroy

也就是说,在对象销毁的时候,会去调用DisposableBeandestroy方法。

同样,在对象销毁有一个参数配置destroy-method,和init-method相同,在调用销毁的时候,先执行 DisposableBeandestroy方法,后执行 destroy-method声明的方法。

代码地址:https://gitee.com/shxz130/SpringInterfaceDemo

https://blog.csdn.net/xiaoxufox/article/details/80420739

Spring中的InitializingBean与DisposableBean的更多相关文章

  1. Spring中的InitializingBean接口的使用

    InitializingBean接口为bean提供了初始化方法的方式,它只包括afterPropertiesSet方法,凡是继承该接口的类,在初始化bean的时候都会执行该方法. 测试,如下: imp ...

  2. Spring bean 实现InitializingBean和DisposableBean接口实现初始化和销毁前操作

    # InitializingBean接口> Spring Bean 实现这个接口,重写afterPropertiesSet方法,这样spring初始化完这个实体类后会调用这个方法```@Over ...

  3. Spring中的InitializingBean接口

    InitializingBean接口为bean提供了初始化方法的方式,它只有afterPropertiesSet方法,凡是继承该接口的类,在初始化bean的时候会执行该方法. 测试程序如下: impo ...

  4. Spring Bean InitializingBean和DisposableBean实例

    在Spring中,InitializingBean和DisposableBean是两个标记接口,为Spring执行时bean的初始化和销毁某些行为时的有用方法. 对于Bean实现 Initializi ...

  5. Spring 中 Bean 的生命周期

    所谓 Bean 的生命周期,就是一个 Bean 从创建到销毁,所经历的各种方法调用.大致包含下面几个方法(不是全部) Bean 的实例化,调用了构造方法. 使用 setter 方法填充属性. 一旦依赖 ...

  6. Spring核心技术(六)——Spring中Bean的生命周期

    前文已经描述了Bean的作用域,本文将描述Bean的一些生命周期作用,配置还有Bean的继承. 定制Bean 生命周期回调 开发者通过实现Spring的InitializeingBean和Dispos ...

  7. Spring中Bean的生命中期与InitializingBean和DisposableBean接口

    Spring提供了一些标志接口,用来改变BeanFactory中的bean的行为.它们包括InitializingBean和DisposableBean.实现这些接口将会导致BeanFactory调用 ...

  8. 【Spring注解驱动开发】使用InitializingBean和DisposableBean来管理bean的生命周期,你真的了解吗?

    写在前面 在<[Spring注解驱动开发]如何使用@Bean注解指定初始化和销毁的方法?看这一篇就够了!!>一文中,我们讲述了如何使用@Bean注解来指定bean初始化和销毁的方法.具体的 ...

  9. spring中InitializingBean接口使用理解

    InitializingBean接口为bean提供了初始化方法的方式,它只包括afterPropertiesSet方法,凡是继承该接口的类,在初始化bean的时候会执行该方法. 测试程序如下: imp ...

随机推荐

  1. Java第三天【变量、常量、数据类型】

    学习Java第三天!加油!请帖友看看有和不足的地方,和在下说一下,谢谢! 变量 变量(variable): 1.变量的本质就是代表"可操作的存储空间",空间位置是确定的,蛋里面放置 ...

  2. go struct结构

    p.p1 { margin: 0; font: 12px ".PingFang SC"; color: rgba(69, 69, 69, 1) } span.s1 { font: ...

  3. selenium截屏操作(也支持截长图)

    1.常用的可能是谷歌和火狐做自动化在抛异常的时候可以截屏保存 from selenium import webdriver br=webdriver.Chrome() br.maximize_wind ...

  4. java语言方法中定义final类型的入参有什么用意?

    无论参数是基本数据类型,还是引用数据类型,只要加了final,不好意思,该参数不可以再赋值(实参传进来给形参,就相当于初始化完成).可以防止在方法里面不小心重新赋值,造成一些不必要的麻烦!!!参考:h ...

  5. 9组-Ahlpa-6/3

    一.基本情况 队名:不行就摆了吧 组长博客:https://www.cnblogs.com/Microsoft-hc/p/15546622.html 小组人数: 8 二.冲刺概况汇报 卢浩玮 过去两天 ...

  6. js-sequence-diagrams > 时序图

    ... <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title ...

  7. R数据分析:生存分析与有竞争事件的生存分析的做法和解释

    今天被粉丝发的文章给难住了,又偷偷去学习了一下竞争风险模型,想起之前写的关于竞争风险模型的做法,真的都是皮毛哟,大家见笑了.想着就顺便把所有的生存分析的知识和R语言的做法和论文报告方法都给大家梳理一遍 ...

  8. 13-Semi-supervised Learning

    半监督学习(semi-supervised learning) 1.introduction 2.Semi-supervised Learning for Generative Model 3.Low ...

  9. [hdu4388]Stone Game II

    不管是否使用技能,发现操作前后所有堆二进制中1的个数之和不变.那么对于一个堆其实可以等价转换为一个k个石子的堆(k为该数二进制的个数),然后就是个nim游戏. 1 #include<bits/s ...

  10. 第一个vue程序

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...