Spring的生命周期演示

本文详细解读Spring框架中对象的生命周期过程,包括构造器实例化、属性设置、初始化前后处理器、自定义初始化和销毁方法,以及容器关闭后的自动销毁。通过实际代码演示和MyProcessor处理器的实现,深入理解每个阶段的工作原理。
摘要由CSDN通过智能技术生成

Spring的生命周期 不要死记硬背 看示例

创建user类

public class User {
    private String name;

    public User() {
        System.out.println("无参构造创建实例");
    }

    public void setName(String name) {
        System.out.println("set方法被调用");
        this.name = name;
    }

    //初始化方法需要在xml文件中配置 否则不生效 下同
    public void init() {
        System.out.println("初始化方法~~~");
    }
    public void destory() {
        System.out.println("销毁方法~~~");
    }
}

对应的spring.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="user" class="cn.bb.pojo.User" 
    init-method="init" 
    destroy-method="destory">
        <property name="name" value="bb"></property>
     </bean>
</beans>

测试

public class Test1 {
    @Test
    public void liveTest() {
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");
        User user = context.getBean("user", User.class);
        System.out.println("使用user--" + user);
        //最后销毁容器  
        context.close();
    }
}

打印结果
在这里插入图片描述
由此可知 Spring的生命周期

  1. 通过构造器创建实例
  2. 为bean的属性设置值 也就是调用set方法
  3. 执行初始化方法—自定义的
  4. 获取示例对象
  5. 在容器关闭后 自动执行bean的销毁方法

但是 这五步还不够详细 其实忽略了后置处理器

它是一个接口 BeanPostProcessor 用了java8的默认实现 我们自己实现重写下该方法

public interface BeanPostProcessor {
    @Nullable
    default Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
        return bean;
    }

    @Nullable
    default Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
        return bean;
    }
}

其实就是打印输出一下

public class MyProcessor implements BeanPostProcessor {
    @Override
    public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
        //由名字可知 是初始化前置处理器
        System.out.println("初始化前执行。。。。。");
        return null;
    }

    @Override
    public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
        //由名字可知 是初始化后置处理器
        System.out.println("初始化后执行。。。。。");
        return null;
    }
}

但是 他只是个普通的类 需要进行配置 这里还是用xml形式

spring.xml 新增该配置就可以了

<bean id="myprocessor" class="cn.bb.pojo.MyProcessor"></bean>

注意 bean的后置处理器 在所有类初始化前后都会执行输出语句

再次测试
在这里插入图片描述

所以生命周期一共分为7步

  1. 通过构造器创建实例
  2. 为bean的属性设置值 也就是调用set方法
  3. 执行bean示例的初始化前置通知postProcessBeforeInitialization
  4. 执行初始化方法—自定义的
  5. 执行bean示例的初始化后置通知postProcessAfterInitialization
  6. 获取示例对象
  7. 在容器关闭后 自动执行bean的销毁方法

生活总是让我们遍体鳞伤,但到后来,那些受伤的地方一定会变成我们最强壮的地方。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值