IOC容器中bean的生命周期

一、Bean生命周期

  Spring IOC容器可以管理Bean的生命周期,允许在Bean生命周期的特定点执行定制的任务。

  Spring IOC容器对Bean的生命周期进行管理的过程如下:

  1. 通过构造器或工厂方法创建Bean实例
  2. 为Bean的属性设置值和对其它Bean的引用
  3. 调用Bean的初始化方法
  4. Bean可以使用了
  5. 当容器关闭时,调用Bean的销毁方法

  在 Bean 的声明里设置 init-method 和 destroy-method 属性, 为 Bean 指定初始化和销毁方法。

  下面通过示例来实现上述的过程:

  首先,编写一个Person类:

public class Person
{
    String name;
    int age;
    String sex;
    public String getName()
    {
        return name;
    }
    public void setName(String name)
    {
        System.out.println("执行name属性");
        this.name = name;
    }
    public int getAge()
    {
        return age;
    }
    public void setAge(int age)
    {
        this.age = age;
    }
    public String getSex()
    {
        return sex;
    }
    public void setSex(String sex)
    {
        this.sex = sex;
    }
    @Override
    public String toString()
    {
        return "Person [name=" + name + ", age=" + age + ", sex=" + sex + "]";
    }
    public void init()
    {
        System.out.println("执行初始化方法!");
    }
    public Person()
    {
        System.out.println("执行构造函数");
    }
    public void destory()
    {
        System.out.println("执行销毁方法");
    }
    public void fun()
    {
        System.out.println("正在使用bean实例");
    }
}

  配置文件bean-cycle.xml为:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="person" class="com.test.Person" init-method="init" destroy-method="destory">
        <property name="name" value="xujian"></property>
        <property name="age" value="23"></property>
        <property name="sex" value="男"></property>
    </bean>
</beans>

  测试函数:

public class Main
{
    public static void main(String[] args)
    {
        ClassPathXmlApplicationContext ctx=new ClassPathXmlApplicationContext("bean-cycle.xml");
        Person person=(Person) ctx.getBean("person");     person.fun();
        ctx.close();
    }
}

  运行结果:

  

  从上图可以看到,首先通过构造函数来创建bean的实例,然后通过setter方法设置属性,在使用bean实例之前,执行了init初始化方法,使用之后又执行了destroy方法。

二、创建Bean后置处理器

  Bean后置处理允许在调用初始化方法前后对Bean进行额外的处理,Bean后置处理器对IOC容器的所有Bean实例逐一处理,而非单一实例。其典型应用是:检查Bean属性的正确性或根据特定的标准更改Bean的属性。

  对Bean后置处理器而言,需要实现接口BeanPostProcessor,在初始化方法被调用前后,Spring将把每个Bean实例分别传递给上述接口的以下两个方法:

   

  添加Bean后置处理器后,Spring IOC容器对Bean的生命周期管理的过程为:  

  1. 通过构造器或工厂方法创建 Bean 实例
  2. 为 Bean 的属性设置值和对其他 Bean 的引用
  3. 将 Bean 实例传递给 Bean 后置处理器的 postProcessBeforeInitialization 方法
  4. 调用 Bean 的初始化方法
  5. 将 Bean 实例传递给 Bean 后置处理器的 postProcessAfterInitialization方法
  6. Bean 可以使用了
  7. 当容器关闭时, 调用 Bean 的销毁方法

  下面就上面的示例进行修改,首先写一个MybeanPostProcessor类并实现BeanPostProcessor接口,代码如下:

public class MybeanPostProcessor implements BeanPostProcessor
{
    @Override
    public Object postProcessBeforeInitialization(Object bean, String beanName)
            throws BeansException
    {
        System.out.println("postProcessBeforeInitialization"+bean+","+beanName);
        return bean;
    }
    @Override
    public Object postProcessAfterInitialization(Object bean, String beanName)
            throws BeansException
    {
        System.out.println("postProcessAfterInitialization"+bean+","+beanName);
        return bean;
    }
}

  然后在bean-cycle.xml中添加这个类的配置

  

  再次运行测试函数,结果如下截图:

  

  

时间: 12-13

IOC容器中bean的生命周期的相关文章

IOC容器中Bean的生命周期方法

一Spring IOC容器可以管理Bean的生命周期,Spring允许在Bean生命周期的特定点执行定制的任务. 二.Spring IOC容器对Bean的生命周期进行管理的过程: -通过构造器或工厂方法创建Bean的实例 -为Bean的属性设置值和对其他的Bean的引用 -调用Bean的初始化方法 -Bean可以用了 -当容器关闭是吗,调用Bean的销毁方法 三.在bean的声明里设置init-method和destroy-method属性.为Bean指定初始化和销毁方法.

[原创]java WEB学习笔记101:Spring学习---Spring Bean配置:IOC容器中bean的声明周期,Bean 后置处理器

本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 -----------------------------------------------------------------------------------------------------------------

《Spring揭秘》(八)---- IoC容器及Bean的生命周期

Spring的IoC容器会以某种方式加载配置信息,然后根据这些信息绑定整个系统的对象,最终组装成一个可用的基于轻量级容器的应用系统.实现以上功能,分为两个阶段:容器启动阶段和Bean实例化阶段.而且Spring的IoC容器在每个阶段都加入了相应的扩展点,以便根据具体场景的需要加入自定义的扩展逻辑. 1 容器启动阶段 首先会通过某种途径加载配置信息,大部分情况下,容器需要依赖某些工具类(BeanDefinitionReader)对加载的配置信息进行解析和分析,并将分析后的信息编组为相应的BeanD

Spring容器中Bean的生命周期

日出日落,春去秋来,花随流水,北雁南飞,世间万物皆有生死轮回.从调用XML中的Bean配置信息,到应用到具体实例中,再到销毁,Bean也有属于它的生命周期. 人类大脑对图像的认知能力永远高于文字,因此,闲言少叙,书归正传,上图先: 步骤很多,切莫惊慌,我们可以把上面的步骤归纳如下: 1-2:创建实例: 现在假设spring就是个容器,而配置文件中配置的bean属性才是我们真正需要的东西.创建实例就是说,我把配置文件中的bean信息取出来化作一个真正的bean并放到容器中. 3-4:注入依赖关系:

Spring中Bean的生命周期

Spring中Bean的生命周期过程: 1.Spring对Bean进行实例化(相当于程序中的new Xx()) 2.Spring将值和Bean的引用注入进Bean对应的属性中 3如果Bean实现了BeanNameAware接口,Spring将Bean的ID传递给setBeanName()方法 (实现BeanNameAware清主要是为了通过Bean的引用来获得Bean的ID,一般业务中是很少有在Bean的ID的) 4.如果Bean实现了BeanFactoryAware接口,Spring将调用se

Spring中Bean的生命周期方法

Bean的生命周期方法 src\dayday\Car.java package dayday; import com.sun.org.apache.xpath.internal.SourceTree; import javax.sound.midi.Soundbank; /** * Created by I am master on 2016/11/28. */public class Car { private String name; public void setName(String n

好记性不如烂笔头86-spring3学习(7)-ApplicationContext中bean的生命周期

假设使用ApplicationContext来生成.管理Bean, 一个Bean从建立到销毁,会历经几个运行阶段. 我个人理解一般的bean的生命周期主要包含:建立,初始化,使用阶段,销毁四个核心阶段.使用ApplicationContext 和BeanFactory对bean的生命周期来看,宏观上基本同样,微观上有一些差异. 假设使用ApplicationContext来生成并管理Bean.在运行BeanfactoryAware的 setBeanFactory()阶段之后.若Bean类上有实现

5.Bean的生命周期

1. Bean 的生命周期: 1). Spring IOC 容器可以管理 Bean 的生命周期, Spring 允许在 Bean 生命周期的特定点执行定制的任务. 2). Spring IOC 容器对 Bean 的生命周期进行管理的过程: <bean id="person" class="com.atguigu.spring.lifecycle.Person" init-method="init" destroy-method="

Spring的Bean的生命周期以及Bean的后置处理器

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