Bean在Spring容器中的生命周期

Bean在Spring容器中的生命周期如下图所示:

1,调用Bean的构造函数(或者工厂方法)实例化Bean.
2,对Bean的成员变量赋值.
3,如果Bean实现了BeanNameAware,调用Bean的setBeanName方法.
4,如果Bean实现了BeanFactoryAware,调用Bean的setBeanFactory方法.
5,如果Bean实现了ApplicationContextAware,调用Bean的setApplicationContext方法.
6,如果容器中配置了BeanPostProcessor,调用BeanPostProcessor的 postProcessBeforeInitialization方法(如果有多个BeanPostProcessor,调用每一个 BeanPostProcessor的postProcessBeforeInitialization方法).
6,如果Bean实现了InitializingBean,调用Bean的afterPropertiesSet方法.
7,如果Bean配置了init-method方法,调用init-method配置的Bean方法.
8,如果容器中配置了BeanPostProcessor,调用BeanPostProcessor的 postProcessAfterInitialization方法.(如果有多个BeanPostProcessor,调用每一个 BeanPostProcessor的postProcessAfterInitialization方法).
9,Bean处于可以使用的状态.
10,Spring容器关闭.
11,4,如果Bean实现了DisposableBean,调用Bean的destroy方法.
12,如果Bean配置了destroy-method方法,调用destroy-method配置的Bean的方法.

 

TestAware.java

package com.wind.frame.base.test;

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.BeanFactoryAware;
import org.springframework.beans.factory.BeanNameAware;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;

public class TestAware implements InitializingBean, ApplicationContextAware, BeanFactoryAware, BeanNameAware {

    public void init() {
        System.out.println("#### enter #####init");
    }

    /*
     * 只有当前bean调用
     */
    public void setApplicationContext(ApplicationContext arg0) throws BeansException {
        System.out.println("#### enter #####setApplicationContext");

    }

    /*
     * 只有当前bean调用
     */
    public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
        System.out.println("#### enter #####setBeanFactory");

    }

    /*
     * 只有当前bean调用
     */
    public void setBeanName(String name) {
        System.out.println("#### enter #####setBeanName,name:" + name);

    }

    /*
     * 只有当前bean调用
     */
    public void afterPropertiesSet() throws Exception {
        System.out.println("#### enter #####afterPropertiesSet");
    }

}


TestBeanPostProcessor.java

package com.wind.frame.base.test;

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;

public class TestBeanPostProcessor implements BeanPostProcessor {

    /*
     * 所有bean都调用
     */
    public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
        System.out.println("#### enter #####postProcessBeforeInitialization,beanName:" + beanName);
        return bean;
    }

    /*
     * 所有bean都调用
     */
    public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
        System.out.println("#### enter #####postProcessAfterInitialization,beanName:" + beanName);
        return bean;
    }

}


配制文件

<bean id="testBeanPostProcessor" class="com.wind.frame.base.test.TestBeanPostProcessor" />
<bean id="testAware" class="com.wind.frame.base.test.TestAware" init-method="init"/>


 运行结果

#### enter #####postProcessBeforeInitialization,beanName:appBiz
#### enter #####postProcessAfterInitialization,beanName:appBiz
#### enter #####setBeanName,name:testAware
#### enter #####setBeanFactory
#### enter #####setApplicationContext
#### enter #####postProcessBeforeInitialization,beanName:testAware
#### enter #####afterPropertiesSet
#### enter #####init
#### enter #####postProcessAfterInitialization,beanName:testAware
#### enter #####postProcessBeforeInitialization,beanName:accountCtrl
#### enter #####postProcessAfterInitialization,beanName:accountCtrl


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值