spring-210724-10--IOC容器--Bean管理-bean的声明周期

spring-210724-10–IOC容器–Bean管理-bean的声明周期


生命周期

生命周期:从创建到销毁。
bean生命周期(五步):
	1. 通过构造器创建bean实例(无参构造)
	2. 为bean的属性设置值和对其他bean的应用(调用set方法)
	3. 调用bean的初始化的方法(需要进行配置初始化的方法)
	4. bean就可以使用(获取到了对象)
	5. 当容器关闭时,调用bean的销毁方法(需要进行配置销毁的方法)
bean的后置处理器(bean的生命周期是7步):
	1. 通过构造器创建bean实例(无参构造)
	2. 为bean的属性设置值和对其他bean的应用(调用set方法)
	
	3. 把bean实例传递给bean后置处理器方法,postProcessBeforeInitialization()方法
	4. 调用bean的初始化的方法(需要进行配置初始化的方法)
	5. 把bean实例传递给bean后置处理器方法,postProcessAfterInitialization()方法
	
	6. bean就可以使用(获取到了对象)
	7. 当容器关闭时,调用bean的销毁方法(需要进行配置销毁的方法)


实现:
	创建类,需要实现 BeanPostProcessor接口

生命周期演示

Orders.java

package com.bgy.spring.bean;

public class Orders {

    private String oname;

    public Orders() {
        System.out.println("第一步,执行无参构造创建bean实例");
    }

    public void setOname(String oname) {
        this.oname = oname;
        System.out.println("第二步,执行set方法设置属性值");
    }


    // 初始化方法(需手动配置)
    public void initMethod(){
        System.out.println("第三步,执行初始化方法");
    }

    // 销毁方法(需手动配置)
    public void destroyMethod(){
        System.out.println("第五步,执行销毁方法");
    }
}

lifecyclebean.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="orders" class="com.bgy.spring.bean.Orders" init-method="initMethod" destroy-method="destroyMethod">
        <property name="oname" value="bgy"></property>
    </bean>
</beans>

MyBeanPost.java(后置处理器,七步)

package com.bgy.spring.bean;

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

public class MyBeanPost implements BeanPostProcessor {
    @Override
    public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
        System.out.println("在初始化执行之前执行的方法");
        return bean;
    }

    @Override
    public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
        System.out.println("在初始化执行之后执行的方法");
        return bean;
    }
}

lifecyclebean02.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="orders" class="com.bgy.spring.bean.Orders" init-method="initMethod" destroy-method="destroyMethod">
        <property name="oname" value="bgy"></property>
    </bean>

    <!--
        配置后置处理器
        它会为每个bean都配置上这个后置处理器
    -->
    <bean id="myBeanPost" class="com.bgy.spring.bean.MyBeanPost"></bean>
</beans>

TestLifeCycle.java

import com.bgy.spring.bean.Orders;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class TestLifeCycle {

    /**
     * 测试五步声明周期
     */
    @Test
    public void test01(){

        // 1. 加载spring配置文件
//        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("lifecyclebean.xml");
        ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("lifecyclebean.xml");

        // 2. 通过配置文件创建bean实例
        Orders orders = applicationContext.getBean("orders", Orders.class);

        System.out.println("第四步,获取创建bean实例对象");
        System.out.println(orders);

        // 手动销毁bean实例
        applicationContext.close();

//    最终输出:
//        第一步,执行无参构造创建bean实例
//        第二步,执行set方法设置属性值
//        第三步,执行初始化方法
//        第四步,获取创建bean实例对象
//        com.bgy.spring.bean.Orders@74ad1f1f
//        第五步,执行销毁方法
    }


    /**
     * 测试七步声明周期
     */
    @Test
    public void test02(){

        // 1. 加载spring配置文件
//        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("lifecyclebean02.xml");
        ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("lifecyclebean02.xml");

        // 2. 通过配置文件创建bean实例
        Orders orders = applicationContext.getBean("orders", Orders.class);

        System.out.println("第四步,获取创建bean实例对象");
        System.out.println(orders);

        // 手动销毁bean实例
        applicationContext.close();

//    最终输出:
//      第一步,执行无参构造创建bean实例
//      第二步,执行set方法设置属性值
//      在初始化执行之前执行的方法
//      第三步,执行初始化方法
//      在初始化执行之后执行的方法
//      第四步,获取创建bean实例对象
//      com.bgy.spring.bean.Orders@69b0fd6f
//      第五步,执行销毁方法
    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值