Bean的生命周期——init-method和destroy-method - 通过让Bean实现InitializingBean,DisposableBean--BeanPostProcessor
* bean的生命周期: * bean创建---初始化----销毁的过程 * 容器管理bean的生命周期; * 我们可以自定义初始化和销毁方法;容器在bean进行到当前生命周期的时候来调用我们自定义的初始化和销毁方法 * * 构造(对象创建) * 单实例:在容器启动的时候创建对象 * 多实例:在每次获取的时候创建对象\ * * BeanPostProcessor.postProcessBeforeInitialization * 初始化: * 对象创建完成,并赋值好,调用初始化方法。。。 * BeanPostProcessor.postProcessAfterInitialization* 销毁: * 单实例:容器关闭的时候 * 多实例:容器不会管理这个bean;容器不会调用销毁方法;
Car.java
package com.dym.bean;public class Car {public Car(){System.out.println("car constructor...");}public void init(){System.out.println("car ... init...");}public void destroy(){System.out.println("car ... destroy...");}}
MainConfigOfLifeCycle.class
package com.dym.config;import org.springframework.context.ApplicationListener;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Scope;import com.dym.bean.Car;@Configuration
public class MainConfigOfLifeCycle {//@Scope("prototype")@Bean(initMethod="init",destroyMethod="destroy")public Car car(){return new Car();}}
IOCTest_LifeCycle.class
package com.dym.test;import org.junit.Test;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;import com.dym.config.MainConfigOfLifeCycle;public class IOCTest_LifeCycle {@Testpublic void test01(){//1、创建ioc容器AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(MainConfigOfLifeCycle.class);System.out.println("容器创建完成...");applicationContext.getBean("car");//关闭容器applicationContext.close();}}
* 1)、指定初始化和销毁方法; * 通过@Bean指定init-method和destroy-method;* 2)、通过让Bean实现InitializingBean(定义初始化逻辑), * DisposableBean(定义销毁逻辑);* 3)、可以使用JSR250; * @PostConstruct:在bean创建完成并且属性赋值完成;来执行初始化方法 * @PreDestroy:在容器销毁bean之前通知我们进行清理工作* 4)、BeanPostProcessor【interface】:bean的后置处理器; * 在bean初始化前后进行一些处理工作; * postProcessBeforeInitialization:在初始化之前工作 * postProcessAfterInitialization:在初始化之后工作
Cat.class
package com.dym.bean.dd;import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.stereotype.Component;@Component
public class Cat implements InitializingBean,DisposableBean {public Cat(){System.out.println("cat constructor...");}@Overridepublic void destroy() throws Exception {// TODO Auto-generated method stubSystem.out.println("cat...destroy...");}@Overridepublic void afterPropertiesSet() throws Exception {// TODO Auto-generated method stubSystem.out.println("cat...afterPropertiesSet...");}
}
Dog.class
package com.dym.bean.dd;import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;import org.springframework.beans.BeansException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;@Component
public class Dog implements ApplicationContextAware {//@Autowiredprivate ApplicationContext applicationContext;public Dog() {System.out.println("dog constructor...");}//对象创建并赋值之后调用@PostConstructpublic void init() {System.out.println("Dog....@PostConstruct...");}//容器移除对象之前@PreDestroypublic void detory() {System.out.println("Dog....@PreDestroy...");}@Overridepublic void setApplicationContext(ApplicationContext applicationContext) throws BeansException {// TODO Auto-generated method stubthis.applicationContext = applicationContext;}
}
MyBeanPostProcessor.class
package com.dym.bean.dd;import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.stereotype.Component;/*** 后置处理器:初始化前后进行处理工作* 将后置处理器加入到容器中*/
@Component
public class MyBeanPostProcessor implements BeanPostProcessor {@Overridepublic Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {// TODO Auto-generated method stubSystem.out.println("postProcessBeforeInitialization..."+beanName+"=>"+bean);return bean;}@Overridepublic Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {// TODO Auto-generated method stubSystem.out.println("postProcessAfterInitialization..."+beanName+"=>"+bean);return bean;}
}
BeanPostProcessor原理
* 遍历得到容器中所有的BeanPostProcessor;挨个执行beforeInitialization, * 一旦返回null,跳出for循环,不会执行后面的BeanPostProcessor.postProcessorsBeforeInitialization * * BeanPostProcessor原理 * populateBean(beanName, mbd, instanceWrapper);给bean进行属性赋值 * initializeBean * { * applyBeanPostProcessorsBeforeInitialization(wrappedBean, beanName); * invokeInitMethods(beanName, wrappedBean, mbd);执行自定义初始化 * applyBeanPostProcessorsAfterInitialization(wrappedBean, beanName); *} * Spring底层对 BeanPostProcessor 的使用; * bean赋值,注入其他组件,@Autowired,生命周期注解功能,@Async,xxx BeanPostProcessor;
Bean的生命周期——init-method和destroy-method - 通过让Bean实现InitializingBean,DisposableBean--BeanPostProcessor相关推荐
- Spring bean的生命周期init和destory
Bean生命周期:定义 --- 初始化 --- 使用 --- 销毁 一.初始化: 方法1.实现org.springframework.beans.foctory.InitializingBean接口, ...
- 《Spring》第六篇 Bean的生命周期 - 销毁
目录 一. Bean的生命周期 - 销毁阶段 1. 单例Bean的自杀模式 2. Spring容器关闭时的执行销毁逻辑 二. 举例验证 1. 自定义销毁方法 2. 实现DisposableBean或者 ...
- Spring 中 Bean 的生命周期
本文作者: 伯乐在线 - yemengying 智商捉鸡?,实在没办法一下子理解Spring IoC和AOP的实现原理,看的闹心也不太懂,所以...决定拆成小的不能在小的一个个问题,一点点啃.今天先来 ...
- 【Spring】Bean的生命周期
Spring Bean是Spring应用中最最重要的部分了.所以来看看Spring容器在初始化一个bean的时候会做那些事情,顺序是怎样的,在容器关闭的时候,又会做哪些事情. 示例代码 git地址: ...
- Spring全家桶(四)Bean的生命周期
十.Bean生命周期 10.1 Bean的生命周期 Spring IOC容器可以管理Bean的生命周期,也允许在Bean生命周期的特定点执行定制的任务. Spring IOC容器对Bean的生命周期进 ...
- spring中bean的生命周期(简单5步)
目录 一.概念 1.生命是bean的生命周期? 2.知道bean生命周期的意义? 3.bean的生命周期按照粗略的五步 二.例子讲解 一.概念 1.生命是bean的生命周期? 答:spring其实就是 ...
- 【Spring6】| Bean的生命周期(五步、七步、十步法剖析)
目录 一:Bean的生命周期 1. 什么是Bean的生命周期 2. Bean的生命周期之五步分析法 3. Bean生命周期之七步分析法 4. Bean生命周期之十步分析法 5. Bean的scop(作 ...
- 深究Spring中Bean的生命周期
前言 这其实是一道面试题,是我在面试百度的时候被问到的,当时没有答出来(因为自己真的很菜),后来在网上寻找答案,看到也是一头雾水,直到看到了<Spring in action>这本书,书上 ...
- (十)Spring中Bean的生命周期(下)
Spring官网阅读(十)Spring中Bean的生命周期(下) 在上篇文章中,我们已经对Bean的生命周期做了简单的介绍,主要介绍了整个生命周期中的初始化阶段以及基于容器启动停止时LifeCycle ...
- 面试问题:Spring中Bean 的生命周期
Spring Bean生命周期执行流程 在传统的 Java 应用中,Bean 的生命周期很简单,使用关键字 new 实例化 Bean,当不需要该 Bean 时,由 Java 自动进行垃圾回收. Spr ...
最新文章
- Hadoop数据仓库工具——Hive
- iOS 之 tableView的复用、设计模式
- 【margin和padding的区别】
- GitHub 私有仓库完全免费面向团队提供
- python正则表达式模块_Python正则表达式函数模块
- matlab相关论文,matlab
- C#入门详解(14)
- 懒惰的JSF Primefaces数据表分页–第1部分
- 不更新安装包,实现文件更新 奕婷特许授权发布
- Java-消息框显示两整数加减乘除
- 离开北上广的互联网工程师最终都去了哪里?
- 【Java每日一题】20161019
- 用于保存计算机输入输出数据的材料及其,与房地产,电子,金融,汽车并称五大产业的是()...
- 计算机一级win7操作题,计算机等级考试一级WIN7操作题.docx
- android 清理大师 编程,清理大师 Android v2.3.3
- Qt--探讨.exe程序加密
- Linux初级入门百篇--lsof工具
- FCC 中级算法题 罗马数字转换器
- js 点击文本框,预览选择图片
- 循环当中的continue用法