Spring 中Bean的生命周期

Spring 中Bean的生命周期:大致分为五步,如果加入了BeanPostProcessor 后置处理器,则是七步。

分别是:

第一步:无参构造函数创建Bean实例
第二步:为Bean属性设值
第三步前:在Bean初始化之前执行(BeanPostProcessor#postProcessBeforeInitialization)
第三步:调用Bean的初始化方法,需要XML配置(init-method)
第三步后:在Bean初始化之后执行(BeanPostProcessor#postProcessAfterInitialization)
第四步:使用Bean
第五步:调用Bean的销毁方法,需要XML配置(destroy-method)

 代码示例:

public class LifeCycleBean {

    private String arg;

    public LifeCycleBean() {
        System.out.println("第一步:无参构造函数创建Bean实例");
    }

    public void initMethod() {
        System.out.println("第三步:调用Bean的初始化方法,需要XML配置");
    }

    public void destroyMethod() {
        System.out.println("第五步:调用Bean的销毁方法,需要XML配置");
    }

    public String getArg() {
        return arg;
    }

    public void setArg(String arg) {
        this.arg = arg;
        System.out.println("第二步:为Bean属性设值");
    }
}
public class MyBeanPostProcessor implements BeanPostProcessor {
    @Override
    public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
        System.out.println("第三步前:在Bean初始化之前执行");
        return bean;
    }

    @Override
    public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
        System.out.println("第三步后:在Bean初始化之后执行");
        return bean;
    }
}
<?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 https://www.springframework.org/schema/beans/spring-beans.xsd">

  <!-- bean definitions here -->
  <bean id="lifeCycleBean" class="org.xharvard.ioc.lifecycle.LifeCycleBean" init-method="initMethod"
        destroy-method="destroyMethod">
    <property name="arg" value="参数" />
  </bean>

  <!-- BeanPostProcessor 配置 -->
  <bean id="myBeanPostProcessor" class="org.xharvard.ioc.lifecycle.MyBeanPostProcessor" />
</beans>

测试:

public class LifeCycleDemo {
    public static void main(String[] args) {
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("META-INF/context-lifecycle.xml");
        context.getBean("lifeCycleBean", LifeCycleBean.class);
        System.out.println("第四步:使用Bean");

        //关闭容器,触发销毁动作
        context.close();
    }
}

输出:

第一步:无参构造函数创建Bean实例
第二步:为Bean属性设值
第三步前:在Bean初始化之前执行
第三步:调用Bean的初始化方法,需要XML配置
第三步后:在Bean初始化之后执行
第四步:使用Bean
第五步:调用Bean的销毁方法,需要XML配置

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值