# bean的生命周期

bean的生命周期

流程

  • 通过构造器创建bean实例(无参数构造)

  • 为bean的属性设置值和其他bean引用(调用set方法)

  • 后置处理器: postProcessBeforeInitialization(Object bean, String beanName)

  • 调用bean的初始化方法(需要配置初始化的方法)

  • 后置处理器: postProcessAfterInitialization(Object bean, String beanName)

  • 获取到bean对象

  • 当容器关闭后,调用bean的销毁的 方法(需要进行销毁方法的配置)

    package com.Zhibin.spring5.bean;
    
    public class Orders {
        private String oName;
        public void setoName(String oName){
            this.oName = oName;
            System.out.println("第二步 调用set方法设置属性的值");
        }
        public Orders(){
            System.out.println("第一步 调用无参构造 this is Orders");
        }
        // 创建执行初始化的方法
        public void initMethod(){
            System.out.println("第三步 进行初始化");
        }
        public void destroyMethod(){
            System.out.println("第五步 关闭时容器时销毁方法");
        }
    
    }
    
    

    后置处理器的类

    // 后置处理器编写方法 , 写一个类 实现 BeanPostProcessor接口
    package com.Zhibin.spring5.bean;
    
    import org.springframework.beans.BeansException;
    import org.springframework.beans.factory.config.BeanPostProcessor;
    import org.springframework.lang.Nullable;
    
    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;
        }
    
    }
    
    

    对于bean的初始化 和 销毁的方法需要我们进行手动配置

    在上面的类中配置了 initMethod 和 destoryMethod 这两个方法 , 分别在bean的对象配置中使用init-methond destory-method 这两个标签 配置相应的方法

    <?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.Zhibin.spring5.bean.Orders" init-method="initMethod" destroy-method="destroyMethod"><!-- 配置初始话方法 在bean里使用 init-method标签 -->
            <property name="oName" value="computer"></property>
        </bean>
        <!-- 在配置的时候会找到类里边的无参构造进行对象的创建 -->
        <!-- 配置后置处理器 -->
        <bean id="myBeanPost" class="com.Zhibin.spring5.bean.MyBeanPost"></bean>
        <!-- 将我们的后置处理器的类作为一个bean 添加到xml中,并且因为默认是一个单例对象,加载xml文件的时候就会去产生一个实例对象,而这是个实现了 BeanPostProcessor 接口的类,会被当做后置处理器处理,并且在这张xml中配置的所有的对象都会被添加这个后置处理器 -->
    </beans>
    

    测试方法

     @Test
        public void testBean(){
             AbstractApplicationContext context = new ClassPathXmlApplicationContext("bean4.xml");// 在这里我们要注意因为在ApplicationContext方法中是没有close方法的,所以在这里使用的时用的时接口实现类AbstractAppliaction
             Orders orders = context.getBean("orders", Orders.class);
             System.out.println("创建实例对象");
             System.out.println(orders);
    
             context.close();
         }
    
    /*
    最终执行结果如下  为了简化我们只在相应的方法里进行打印
    第一步 调用无参构造 this is Orders
    第二步 调用set方法设置属性的值
    在初始化之前
    第三步 进行初始化
    在初始化之后
    创建实例对象
    com.Zhibin.spring5.bean.Orders@13eb8acf
    第五步 关闭时容器时销毁方法
    
    
    */
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值