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 ...
随机推荐
- Java第三天【变量、常量、数据类型】
学习Java第三天!加油!请帖友看看有和不足的地方,和在下说一下,谢谢! 变量 变量(variable): 1.变量的本质就是代表"可操作的存储空间",空间位置是确定的,蛋里面放置 ...
- go struct结构
p.p1 { margin: 0; font: 12px ".PingFang SC"; color: rgba(69, 69, 69, 1) } span.s1 { font: ...
- selenium截屏操作(也支持截长图)
1.常用的可能是谷歌和火狐做自动化在抛异常的时候可以截屏保存 from selenium import webdriver br=webdriver.Chrome() br.maximize_wind ...
- java语言方法中定义final类型的入参有什么用意?
无论参数是基本数据类型,还是引用数据类型,只要加了final,不好意思,该参数不可以再赋值(实参传进来给形参,就相当于初始化完成).可以防止在方法里面不小心重新赋值,造成一些不必要的麻烦!!!参考:h ...
- 9组-Ahlpa-6/3
一.基本情况 队名:不行就摆了吧 组长博客:https://www.cnblogs.com/Microsoft-hc/p/15546622.html 小组人数: 8 二.冲刺概况汇报 卢浩玮 过去两天 ...
- js-sequence-diagrams > 时序图
... <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title ...
- R数据分析:生存分析与有竞争事件的生存分析的做法和解释
今天被粉丝发的文章给难住了,又偷偷去学习了一下竞争风险模型,想起之前写的关于竞争风险模型的做法,真的都是皮毛哟,大家见笑了.想着就顺便把所有的生存分析的知识和R语言的做法和论文报告方法都给大家梳理一遍 ...
- 13-Semi-supervised Learning
半监督学习(semi-supervised learning) 1.introduction 2.Semi-supervised Learning for Generative Model 3.Low ...
- [hdu4388]Stone Game II
不管是否使用技能,发现操作前后所有堆二进制中1的个数之和不变.那么对于一个堆其实可以等价转换为一个k个石子的堆(k为该数二进制的个数),然后就是个nim游戏. 1 #include<bits/s ...
- 第一个vue程序
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...