码迷,mamicode.com
首页 > 其他好文 > 详细

IOC容器中bean的生命周期

时间:2015-12-15 22:42:14      阅读:604      评论:0      收藏:0      [点我收藏+]

标签:

一、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中添加这个类的配置

  技术分享

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

  技术分享

  

IOC容器中bean的生命周期

标签:

原文地址:http://www.cnblogs.com/xujian2014/p/5049483.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!