* 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相关推荐

  1. Spring bean的生命周期init和destory

    Bean生命周期:定义 --- 初始化 --- 使用 --- 销毁 一.初始化: 方法1.实现org.springframework.beans.foctory.InitializingBean接口, ...

  2. 《Spring》第六篇 Bean的生命周期 - 销毁

    目录 一. Bean的生命周期 - 销毁阶段 1. 单例Bean的自杀模式 2. Spring容器关闭时的执行销毁逻辑 二. 举例验证 1. 自定义销毁方法 2. 实现DisposableBean或者 ...

  3. Spring 中 Bean 的生命周期

    本文作者: 伯乐在线 - yemengying 智商捉鸡?,实在没办法一下子理解Spring IoC和AOP的实现原理,看的闹心也不太懂,所以...决定拆成小的不能在小的一个个问题,一点点啃.今天先来 ...

  4. 【Spring】Bean的生命周期

    Spring Bean是Spring应用中最最重要的部分了.所以来看看Spring容器在初始化一个bean的时候会做那些事情,顺序是怎样的,在容器关闭的时候,又会做哪些事情. 示例代码 git地址: ...

  5. Spring全家桶(四)Bean的生命周期

    十.Bean生命周期 10.1 Bean的生命周期 Spring IOC容器可以管理Bean的生命周期,也允许在Bean生命周期的特定点执行定制的任务. Spring IOC容器对Bean的生命周期进 ...

  6. spring中bean的生命周期(简单5步)

    目录 一.概念 1.生命是bean的生命周期? 2.知道bean生命周期的意义? 3.bean的生命周期按照粗略的五步 二.例子讲解 一.概念 1.生命是bean的生命周期? 答:spring其实就是 ...

  7. 【Spring6】| Bean的生命周期(五步、七步、十步法剖析)

    目录 一:Bean的生命周期 1. 什么是Bean的生命周期 2. Bean的生命周期之五步分析法 3. Bean生命周期之七步分析法 4. Bean生命周期之十步分析法 5. Bean的scop(作 ...

  8. 深究Spring中Bean的生命周期

    前言 这其实是一道面试题,是我在面试百度的时候被问到的,当时没有答出来(因为自己真的很菜),后来在网上寻找答案,看到也是一头雾水,直到看到了<Spring in action>这本书,书上 ...

  9. (十)Spring中Bean的生命周期(下)

    Spring官网阅读(十)Spring中Bean的生命周期(下) 在上篇文章中,我们已经对Bean的生命周期做了简单的介绍,主要介绍了整个生命周期中的初始化阶段以及基于容器启动停止时LifeCycle ...

  10. 面试问题:Spring中Bean 的生命周期

    Spring Bean生命周期执行流程 在传统的 Java 应用中,Bean 的生命周期很简单,使用关键字 new 实例化 Bean,当不需要该 Bean 时,由 Java 自动进行垃圾回收. Spr ...

最新文章

  1. Hadoop数据仓库工具——Hive
  2. iOS 之 tableView的复用、设计模式
  3. 【margin和padding的区别】
  4. GitHub 私有仓库完全免费面向团队提供
  5. python正则表达式模块_Python正则表达式函数模块
  6. matlab相关论文,matlab
  7. C#入门详解(14)
  8. 懒惰的JSF Primefaces数据表分页–第1部分
  9. 不更新安装包,实现文件更新 奕婷特许授权发布
  10. Java-消息框显示两整数加减乘除
  11. 离开北上广的互联网工程师最终都去了哪里?
  12. 【Java每日一题】20161019
  13. 用于保存计算机输入输出数据的材料及其,与房地产,电子,金融,汽车并称五大产业的是()...
  14. 计算机一级win7操作题,计算机等级考试一级WIN7操作题.docx
  15. android 清理大师 编程,清理大师 Android v2.3.3
  16. Qt--探讨.exe程序加密
  17. Linux初级入门百篇--lsof工具
  18. FCC 中级算法题 罗马数字转换器
  19. js 点击文本框,预览选择图片
  20. 循环当中的continue用法

热门文章

  1. Template methed
  2. [Swift]LeetCode206. 反转链表 | Reverse Linked List
  3. mysql 单表查询
  4. NOI 2015 品酒大会
  5. Java基础——左移和右移
  6. 十天精通CSS3(11)
  7. inline ,inline-block ,block
  8. Android studio使用心得(二)— 打包签名apk发布
  9. jsp动作之 getProperty
  10. javascript 的观察者模式的原理和集线器