IOC操作Bean管理-Bean的生命周期

17 篇文章 0 订阅

什么是生命周期?

  • 从对象的创建到对象销毁的过程

Bean的生命周期(不加后置处理器)

  1. 通过构造器创建bean实例(无参构造)
  2. 为Bean的属性设置值和对其他Bean的引用(调用set方法)
  3. 调用Bean的初始化方法(需要进行配置)
  4. Bean可以使用该了(对象获取到了)
  5. 当容器在关闭的时候,调用Bean的销毁方法(需要进行配置销毁的方法)

演示操作流程

  • 第一步
    1.在实体类创建无参构造方法
    在这里插入图片描述

  • 第二步
    1.在实体类生成set方法
    在这里插入图片描述

  • 第三步
    1.写一个初始化方法,仅用来显示效果
    在这里插入图片描述
    2.在配置文件中写上init-method属性参数为初始化方法名
    在这里插入图片描述

  • 第四步
    1.在测试类中获取到对象
    在这里插入图片描述

  • 第五步
    1.在配置文件中使用destroy-method属性参数名为实体类中的销毁方法
    在这里插入图片描述
    2.在实体类写一个销毁方法,仅用于显示效果
    在这里插入图片描述

  1. 测试类代码
    在这里插入图片描述
    运行结果:
    在这里插入图片描述

总结:

  • 在输出结果中可以看出该Bean在生命周期中的整个流程和执行方法的顺序

代码全部内容一览:

  • 实体类代码
package com.yang.pojo;
/**
 * @program: TestSpring
 * @description: 演示Bean的生命周期
 * @author: 陈阳
 * @create: 2021-01-22 14:44
 **/
public class Orders {
    private String ordersName;

    /**
     * 无参构造方法
     */
    public Orders() {
        System.out.println("第一步,通过构造器创建bean的实例");
    }

    /**
     * set方法
     * @param ordersName
     */
    public void setOrdersName(String ordersName) {
        System.out.println("第二步,为bean的属性设置值");
        this.ordersName = ordersName;
    }

    /**
     * 随便写的初始化方法,方法名可以任意
     */
    public void init(){
        System.out.println("第三步,初始化方法");
    }
    /**
     * 随便写的销毁方法,方法名可以任意
     */
    public void distroy(){
        System.out.println("第五步,销毁方法");
    }
}

  • 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">

            <!--
                init-method:调用初始化方法(参数里写方法名不用加括号)
                destroy-method:调用销毁方法(参数里写方法名不用加括号)
            -->
    <bean id="orders" class="com.yang.pojo.Orders" init-method="init" destroy-method="distroy">
        <property name="ordersName" value="练习订单"/>
    </bean>


</beans>
  • 测试类代码
package com.yang.run;

import com.sun.org.apache.bcel.internal.util.ClassPath;
import com.sun.org.apache.xpath.internal.SourceTree;
import com.yang.pojo.ArrayAndCollection;
import com.yang.pojo.Book;
import com.yang.pojo.MyBean;
import com.yang.pojo.Orders;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.core.annotation.Order;

import java.sql.SQLOutput;
import java.util.Arrays;

/**
 * @program: TestSpring
 * @description: 测试bean对象是否创建成功
 * @author: 陈阳
 * @create: 2021-01-21 19:40
 **/
public class TestBean {
   
    @Test
    public void testOrders(){
        /**
         * ApplicationContext context = new ClassPathXmlApplicationContext("OrderBean.xml");
         *
         *    在这里不使用上边的ApplicationContext接口,
         *    因为该接口中没有close()手动销毁方法如果使用该接口则调用close()方法时需强转
         *    例如:((ClassPathXmlApplicationContext)context).close();
         *    所以建议直接使用ClassPathXmlApplicationContext类
         */
        ClassPathXmlApplicationContext context =
                new ClassPathXmlApplicationContext("OrderBean.xml");
        Orders orders = context.getBean("orders", Orders.class);
        System.out.println("第四步,获取到对象了");
        //调用销毁方法
        context.close();
    }
}


Bean的后置处理器

  • 如果加上后置处理器Bean的生命周期一共有七步,如果不加仅有五步
  1. 通过构造器创建bean实例(无参构造)
  2. 为Bean的属性设置值和对其他Bean的引用(调用set方法)
  3. 把bean的实例传递给Bean的后置处理器方法: postProcessBeforeInitialization()
  4. 调用Bean的初始化方法(需要进行配置)
  5. 把Bean的实例传递Bean后置处理器方法: postProcessAfterInitialization()
  6. Bean可以使用该了(对象获取到了)
  7. 当容器在关闭的时候,调用Bean的销毁方法(需要进行配置销毁的方法)

演示添加后置处理器效果

1.创建后置处理器类实现BeanPostProcessor接口

  • 让将要作为后置处理器的类实现BeanPostProcessor接口
    在这里插入图片描述

  • 该接口有以下两个方法
    在这里插入图片描述

  • 将方法复制到后置处理器类中,并将访问权限改为public,将注解改为@Override重写
    在这里插入图片描述

  • 为了显示运行效果在两个方法中加上输出语句
    在这里插入图片描述

  • 在配置文件中加入属性
    在这里插入图片描述

  • 运行结果
    在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值