Bean的生命周期:

Spring IOC 容器可以管理 Bean 的生命周期,
Spring 允许在 Bean 生命周期的特定点执行定制的任务.
Spring IOC 容器对 Bean 的生命周期进行管理的过程:
      1通过构造器或工厂方法创建 Bean 实例
      2为 Bean 的属性设置值和对其他 Bean 的引用
      3调用 Bean 的初始化方法(可以人为指定,利用Bean标签的inti-method属性指定初始化方法,不指定就默认忽略这步骤) Bean 可以使用了
      4当容器关闭时, 调用 Bean 的销毁方法(可以人为指定,利用Bean标签的destroy-method属性指定销毁方法,不指定就默认忽略这步骤 )

代码示例:
Bean实例代码:

package com.jeremy.spring.cycle;

public class person {
private String Name;
public void setName(String name) {
Name = name;
System.out.println("Setter............");
}
public person() {
System.out.println("person constructor.......");
} public void init(){
System.out.println("init......");
}
public void destory(){
System.out.println("desdtory......");
} @Override
public String toString() {
return "person [Name=" + Name + "]";
}

配置了init-method和destroy-method后

测试代码:

    @Test
public void testNoProcessorCycle(){
ConfigurableApplicationContext caContext=new ClassPathXmlApplicationContext("Bean-cycle.xml");
person person=(com.jeremy.spring.cycle.person) caContext.getBean("person");
caContext.close();
}

测试结果:

person constructor.......
Setter............
init......
2014-10-14 19:49:36 org.springframework.context.support.AbstractApplicationContext doClose
信息: Closing org.springframework.context.support.ClassPathXmlApplicationContext@8965fb: startup date [Tue Oct 14 19:49:35 CST 2014]; root of context hierarchy
desdtory......

证明Bean的声明流程如上所说

1为什么需要Bean的后置处理器(就是用来在容器调用Bean的init()的方法前后进行处理)---一旦IOC配置了Bean的后置处理器是对Bean所在的IOC容器里面所有Bean都是有效的
如果不配置后置处理器,每次IOC容器就直接示例化Bean,但是如果再实际的开发中,我们需要在Bean初始前配置和其他的初始化后添加一些自己的逻辑处理??那怎么办,那这时候就需要用到Bean的后置处理器了

2配置Bean后置处理器的步骤:

  1需要新建一个类实现BeanPostProcessor接口,并实现 postProcessAfterInitialization(Object arg0, String arg1), postProcessBeforeInitialization(Object arg0, String arg1)两个方法

   arg0:就是传入的Bean对象,
   arg1:就是Bean的ID值
   返回值:就是返回一个Bean对象,我们也可以认为的修改返回的Bean对象,不一定一定要返回容器初始化的那个Bean对象
  代码下:
  

package com.jeremy.spring.cycle;

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor; public class MyBeanPostProcessor implements BeanPostProcessor { public MyBeanPostProcessor() {
// TODO Auto-generated constructor stub
} @Override
public Object postProcessAfterInitialization(Object arg0, String arg1)
throws BeansException {
System.out.println("before init..........."+arg0.getClass());
return arg0;
} @Override
public Object postProcessBeforeInitialization(Object arg0, String arg1)
throws BeansException {
// TODO Auto-generated method stub
System.out.println("after init..........."+arg0.getClass());
return arg0;
} }

2在XML配置文件配置后置处理器,

<!-- 配置 bean 后置处理器: 不需要配置 id 属性, IOC 容器会识别到他是一个 bean 后置处理器, 并调用其方法 -->
<bean class="com.jeremy.spring.cycle.MyBeanPostProcessor"></bean>

3测试代码

@Test
public void testNoProcessorCycle(){
ConfigurableApplicationContext caContext=new ClassPathXmlApplicationContext("Bean-cycle.xml");
person person=(com.jeremy.spring.cycle.person) caContext.getBean("person");
caContext.close();
}

运行结果:
这是具有后置处理器Bean的生命流程流程如下:

person constructor.......
Setter............

before init...........class com.jeremy.spring.cycle.person
init...................
after init...........class com.jeremy.spring.cycle.person
destory.....................

Spring的Bean的生命周期以及Bean的后置处理器的更多相关文章

  1. spring源码学习(四)-spring生命周期用到的后置处理器

    生命周期的九大后置处理器 第一次调用后置处理器org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory# ...

  2. Spring Ioc源码分析系列--Ioc容器BeanFactoryPostProcessor后置处理器分析

    Spring Ioc源码分析系列--Ioc容器BeanFactoryPostProcessor后置处理器分析 前言 上一篇文章Spring Ioc源码分析系列--Ioc源码入口分析已经介绍到Ioc容器 ...

  3. Spring 中 Bean 的生命周期

    所谓 Bean 的生命周期,就是一个 Bean 从创建到销毁,所经历的各种方法调用.大致包含下面几个方法(不是全部) Bean 的实例化,调用了构造方法. 使用 setter 方法填充属性. 一旦依赖 ...

  4. Spring第三天,详解Bean的生命周期,学会后让面试官无话可说!

    点击下方链接回顾往期 不要再说不会Spring了!Spring第一天,学会进大厂! Spring第二天,你必须知道容器注册组件的几种方式!学废它吊打面试官! 今天讲解Spring中Bean的生命周期. ...

  5. spring中的bean的生命周期

    bean的生命周期:bean的创建 —— 初始化 ——销毁的过程 容器管理bean的生命周期,我们可以自定义初始化和销毁方法,容器在bean进行到当前生命周期就会调用我们的方法 在xml配置文件中是在 ...

  6. BeanFactory中Bean的生命周期

    Bean的生命周期图解 集体过程如下: 当调用者通过getBean(beanName)向容器请求某一个Bean时,如果容器注册了org.springframework.beans.factory.co ...

  7. 浅尝Spring注解开发_Bean生命周期及执行过程

    Spring注解开发 浅尝Spring注解开发,基于Spring 4.3.12 包含Bean生命周期.自定义初始化方法.Debug BeanPostProcessor执行过程及在Spring底层中的应 ...

  8. Spring的后置处理器BeanPostProcessor

    一.BeanPostProcessor接口的作用 如果我们需要在Spring容器完成Bean的实例化.配置和其他的初始化前后添加一些自己的逻辑处理,我们就可以定义一个或者多个BeanPostProce ...

  9. Spring Bean的生命周期(非常详细)

    Spring作为当前Java最流行.最强大的轻量级框架,受到了程序员的热烈欢迎.准确的了解Spring Bean的生命周期是非常必要的.我们通常使用ApplicationContext作为Spring ...

随机推荐

  1. Apache、Tomcat负载均衡与集群

    一. 环境准备 1.软件下载 a) apache_2.0.55-win32-x86-no_ssl.msi: b) apache-tomcat-5.5.17.rar c) mod_jk-apache-2 ...

  2. atitit.安全的签名摘要 算法attilax总结

    atitit.安全的签名 算法attilax总结 1. MD5 (不推荐)结果是128位二进制,只有转为16进制字符串是32位 1 2. 使用sha1算法加密后的密串长度有40位,相对更安全一些.Sh ...

  3. ZOJ 3635 Cinema in Akiba (第一次组队) 树状数组+二分

    Cinema in Akiba Time Limit: 3 Seconds      Memory Limit: 65536 KB Cinema in Akiba (CIA) is a small b ...

  4. [转] C#与Java的比较

    [转] C#与Java的比较 转自:C#与Java的比较 2015-06-26 目录 一.C#.C++和Java二.语言规范的比较  2.1.简单数据类型  2.2.常量  2.3.公用类的入口点  ...

  5. 0077 web.xml中配置Spring MVC时,Servlet-name上报Servlet should have a mapping的错误

    这次是手工建立的web工程目录,在配置webapp/WEB-INF/web.xml的Spring MVC的DispatcherServlet时,在servlet-name上报错:Servlet sho ...

  6. SAP ECC6安装系列五:安装后 License 的处理

    原作者博客 http://www.cnblogs.com/Michael_z/ ======================================== 我发现我确实比较懒,先和各位说声抱歉了 ...

  7. 解决将Ubuntu下导出的requirements.txt到Centos服务器上面出现pkg-resource的版本为0.0.0

    最直接有效的方法: 原因:

  8. Datatable添加数据,提示该行已经属于另一个表的解决方法

    一.DataTable.Rows.Add(DataRow.ItemArray); 二.DataTable.ImportRow(DataRow) 三.设置DataTable的tablename,然后.R ...

  9. [转]Vim插件管理工具Vundle

    原文:http://www.linuxzen.com/vimpei-zhi-xi-lie-cha-jian-guan-li.html 当转载成为一种习惯.. 最近对Vim进行了一番较大的配置变动,所以 ...

  10. PHP——动态随机数

    取1-13随机数 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://ww ...