Spring中的InitializingBean与DisposableBean
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的时候,可以配置bean的init-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定义的方法。
也就是说spring为bean提供了两种初始化的方式,第一种实现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
也就是说,在对象销毁的时候,会去调用DisposableBean的destroy方法。
同样,在对象销毁有一个参数配置destroy-method,和init-method相同,在调用销毁的时候,先执行 DisposableBean的destroy方法,后执行 destroy-method声明的方法。
https://blog.csdn.net/xiaoxufox/article/details/80420739
Spring中的InitializingBean与DisposableBean的更多相关文章
- Spring中的InitializingBean接口的使用
InitializingBean接口为bean提供了初始化方法的方式,它只包括afterPropertiesSet方法,凡是继承该接口的类,在初始化bean的时候都会执行该方法. 测试,如下: imp ...
- Spring bean 实现InitializingBean和DisposableBean接口实现初始化和销毁前操作
# InitializingBean接口> Spring Bean 实现这个接口,重写afterPropertiesSet方法,这样spring初始化完这个实体类后会调用这个方法```@Over ...
- Spring中的InitializingBean接口
InitializingBean接口为bean提供了初始化方法的方式,它只有afterPropertiesSet方法,凡是继承该接口的类,在初始化bean的时候会执行该方法. 测试程序如下: impo ...
- Spring Bean InitializingBean和DisposableBean实例
在Spring中,InitializingBean和DisposableBean是两个标记接口,为Spring执行时bean的初始化和销毁某些行为时的有用方法. 对于Bean实现 Initializi ...
- Spring 中 Bean 的生命周期
所谓 Bean 的生命周期,就是一个 Bean 从创建到销毁,所经历的各种方法调用.大致包含下面几个方法(不是全部) Bean 的实例化,调用了构造方法. 使用 setter 方法填充属性. 一旦依赖 ...
- Spring核心技术(六)——Spring中Bean的生命周期
前文已经描述了Bean的作用域,本文将描述Bean的一些生命周期作用,配置还有Bean的继承. 定制Bean 生命周期回调 开发者通过实现Spring的InitializeingBean和Dispos ...
- Spring中Bean的生命中期与InitializingBean和DisposableBean接口
Spring提供了一些标志接口,用来改变BeanFactory中的bean的行为.它们包括InitializingBean和DisposableBean.实现这些接口将会导致BeanFactory调用 ...
- 【Spring注解驱动开发】使用InitializingBean和DisposableBean来管理bean的生命周期,你真的了解吗?
写在前面 在<[Spring注解驱动开发]如何使用@Bean注解指定初始化和销毁的方法?看这一篇就够了!!>一文中,我们讲述了如何使用@Bean注解来指定bean初始化和销毁的方法.具体的 ...
- spring中InitializingBean接口使用理解
InitializingBean接口为bean提供了初始化方法的方式,它只包括afterPropertiesSet方法,凡是继承该接口的类,在初始化bean的时候会执行该方法. 测试程序如下: imp ...
随机推荐
- 【死磕 NIO】— Proactor模式是什么?很牛逼吗?
大家好,我是大明哥. 上篇文章我们分析了高性能 IO模型Reactor模式,了解了什么是Reactor 模式以及它的三种常见的模式,这篇文章,大明再介绍另外一种高性能IO模型: Proactor. 为 ...
- Oracle SQL注入 总结
0x00 Oracle基础 Oracle 基本使用 什么是Oracle数据库? Oracle公司目前是世界上最大的软件提供商之一,与它并列的还有 Microsoft与 Adode.并且随着 Oracl ...
- win10 python3.8 wxpython.whl 安装步骤
wxpython是python开发常用图形用户界面(GUI)工具之一,GUI因其直观便捷,对我们提高开发效率一定帮助.这里介绍一下新版本wxPython 4.0.1的安装过程及注意事项. 第1步:下 ...
- PTA 7-3 畅通工程之最低成本建设问题 (30分)
PTA 7-3 畅通工程之最低成本建设问题 (30分) 现有村落间道路的统计数据表中,列出了有可能建设成标准公路的若干条道路的成本,求使每个村落都有公路连通所需要的最低成本. 输入格式: 输入数据包括 ...
- Linux系统僵尸进程详解
大安好,我是良许. 本文我们将来讨论一下什么是僵尸进程,僵尸进程是怎么产生的,如何杀死一个僵尸进程. Linux中的进程是什么? 讲到进程,我们要先了解一下另一个概念:程序. 程序说白了就是躺在电脑硬 ...
- <C#任务导引教程>练习八
//66,静态成员与非静态成员的访问方式using System;class Text{ public int x; public static int y;//静态数据成员 voi ...
- liunx下安装mysql(8.0.27)
一.软件下载: 1.通过官网下载: https://dev.mysql.com/downloads/repo/yum/ 本文使用的系统为centos7,基于RedHat7的版本 2.下载完成后文件 m ...
- [Aizu2993]Invariant Tree
若$(i,j)\in E$,实际上会不断推出$(p_{i},p_{j})\in E,(p_{p_{i}},p_{p_{j}})\in E,...$ 考虑将$i$向$p_{i}$连边得到了一张(由若干个 ...
- [atARC080F]Prime Flip
构造一个数组$b_{i}$(初始为0),对于操作$[l_{i},r_{i}]$,令$b_{l_{i}}$和$b_{r_{i}+1}$值异或1,表示$i$和$i-1$的差值发生改变,最终即要求若干个$b ...
- Java 单例模式大乱斗
1. 饿汉模式 线程安全 public class SingleInstance1 { private static SingleInstance1 single=new SingleInstance ...