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

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

public interface InitializingBean {
void afterPropertiesSet() throws Exception;
}

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

  • 首先声明一个Bean
package com.github.jettyrun.springinterface.demo.initializingbean;

import org.springframework.beans.factory.InitializingBean;

/**
* Created by jetty on 18/1/31.
*/
public class InitBean implements InitializingBean{ public void afterPropertiesSet() throws Exception {
System.out.println("init-afterPropertiesSet()");
} public void test(){
System.out.println("init-test()");
}
}
  • 然后用Spring管理,初始化一个Bean
 <bean id="initBean" class="com.github.jettyrun.springinterface.demo.initializingbean.InitBean"></bean>
  • 加载一下上下文
public static void main(String[] args) {
ApplicationContext applicationContext=new ClassPathXmlApplicationContext("classpath:application-usertag.xml");
}
  • 运行结果
init-afterPropertiesSet()

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

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

配置如下:

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

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

init-afterPropertiesSet()
init-test()

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

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

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

public interface DisposableBean {
void destroy() throws Exception;
}

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

public class InitBean implements InitializingBean,DisposableBean {
public void destroy() throws Exception {
System.out.println("destroy"); } public void afterPropertiesSet() throws Exception {
System.out.println("init-afterPropertiesSet()");
} public void test(){
System.out.println("init-test()");
}

再运行一下main方法:

public class Main {

    public static void main(String[] args) {
AbstractApplicationContext applicationContext=new ClassPathXmlApplicationContext("classpath:application-usertag.xml");
// InitBean initBean=(InitBean)applicationContext.getBean("initBean");
System.out.println("init-success");
applicationContext.registerShutdownHook();
}
}

执行结果:

init-afterPropertiesSet()
init-test()
init-success
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. 倒谱Cepstrum本质的理解

    1.理解: 信号叠加时,不是都是线性关系(时域相互+ 频率相加):有的时候是两种信号成分相乘得到的,(时域卷积,频域相乘):比如很多齿轮啮合时振动信号调制现象,电机的轴向与径向的振动耦合时采集到的振动 ...

  2. k8s入坑之路(13)服务迁移(定时任务 微服务 传统服务)

    定时任务迁移kubernetes 服务迁移步骤 1.安装好java 2.安装好maven 项目打包 mvn package 测试传参运行 java -cp cronjob-demo-1.0-SNAPS ...

  3. 子查询 & 联合查询

    子查询 嵌套在其他语句内部的select语句称为子查询或内查询,外层的语句可以是insert.update.delete.select等,一般select作为外层语句较多.外面如果为select语句, ...

  4. c++学习笔记2(const关键词的用法)

    定义常量指针 优势(便于类型检查,define无类型检查(目前不是很理解)) (函数参数为常量指针时,可避免函数内部不小心改变参数指针所指的地方,如有出现此类语句,编译则会报错) strcpy:复制字 ...

  5. 菜鸡的Java笔记 简单JAVA 类的开发原则以及具体实现

    /*  现在要求定义一个雇员信息类 在这个类之中包含有雇员编号 姓名 职位 基本工资 佣金等信息    对于此时给定要求实际上就是描述一类事物,而这样的程序类在在java之中可以将其称为简单java类 ...

  6. 多线程合集(二)---异步的那些事,async和await原理抛析

    引言 在c#中,异步的async和await原理,以及运行机制,可以说是老生常谈,经常在各个群里看到有在讨论这个的,而且网上看到的也只是对异步状态机的一些讲解,甚至很多人说异步状态机的时候,他们说的是 ...

  7. Furion分表分库我也要happy coding

    Furion分表分库集成ShardingCore ShardingCore ShardingCore 易用.简单.高性能.普适性,是一款扩展针对efcore生态下的分表分库的扩展解决方案,支持efco ...

  8. Error occurred during initialization of VM Could not reserve enough space fo

    通过es的elasticsearch.bat 启动.发现错误:Error occurred during initialization of VM Could not reserve enough s ...

  9. 32、最长有效括号 | 算法(leetode,附思维导图 + 全部解法)300题

    零 标题:算法(leetode,附思维导图 + 全部解法)300题之(32)最长有效括号 一 题目描述 二 解法总览(思维导图) 三 全部解法 1 方案1 1)代码: // 方案1 "滑动窗 ...

  10. cookie的生命周期、访问限制、作用域、prefixes

    cookie的生命周期 cookie的生命周期可以通过两种方式定义: 会话期cookie是最简单的cookie:浏览器关闭后会被自动删除.会话期cookie不需要指定过期时间(Expires)或者有效 ...