Spring学习笔记(2)-Spring中bean的生命周期

来源:互联网 发布:ubuntu不显示输入法 编辑:程序博客网 时间:2024/04/29 13:46

Spring中bean的生命周期

    本文添加了一个实现org.springframework.beans.factory.config.BeanPostProcessor接口的bean,此bean并非为某个bean而建,它将影响所有bean的创建。本文中的该bean配置如下:

public class Part2Test implements BeanPostProcessor{@Overridepublic Object postProcessAfterInitialization(Object bean, String beanName)throws BeansException {System.out.println("postProcessAfterInitialization:    "+    beanName);return bean;}@Overridepublic Object postProcessBeforeInitialization(Object bean, String beanName)throws BeansException {System.out.println("postProcessBeforeInitialization:    "+    beanName);return bean;}}
在spring的xml配置文件中需要声明该bean才能生效:

<bean class="com.feng.test.part2.Part2Test"/>
此时该bean就配置完成,他将在所有bean的init方法执行前后产生效果,本文将以创建一个id=user的bean,以此来展示一个bean从创建到销毁的生命周期。以下为该bean中的主要内容和xml中的配置

public class User {    private int id;    private String name;    private String password;    public User() {        System.out.println("user constructor......");    }    public int getId() {        return id;    }    public void setId(int id) {        System.out.println("set id");        this.id = id;    }    public String getName() {        return name;    }    public void setName(String name) {        System.out.println("set name");        this.name = name;    }    public String getPassword() {        return password;    }    public void setPassword(String password) {        System.out.println("set password");        this.password = password;    }    public void init(){        System.out.println("user init........");    }    public void destroy(){        System.out.println("user destroy.......");    }}
xml中的配置:
 <bean id="user" class="com.feng.part2.User" init-method="init" destroy-method="destroy">        <property name="id" value="1"/>         <property name="name" value="zhangsan"/>        <property name="password" value="123456"/>    </bean>

user bean的生命周期如下:

    1.通过构造器生成bean实例,控制台输出user constructor......

    2.set属性注入,控制台输出set id,set name,set password

    3.将bean实例传递给bean后置处理器的postProcessBeforeInitialization方法,控制台输出postProcessAfterInitialization:    user

    4:bean中的初始化方法(init方法)启动,控制台输出:user init...........

    5:.将bean实例传递给bean后置处理器的postProcessAfterInitialization方法,控制台输出postProcessAfterInitialization:    user

    6:此时user bean创建完成,可以对该bean进行操作

    7:当ioc容器关闭时,调用user的销毁方法(destroy方法),控制台输出user destroy.......该bean的整个生命流程结束



注意,当你的bean实现一些额外接口时,该生命周期会多出一些步骤,例如若user类实现了org.springframework.beans.factory.BeanNameAware接口,则会在set属性注入后,执行setBeanName()方法(BeanNameAware接口的实现方法),总的执行顺序会多一步。





0 0
原创粉丝点击