Bean的生命周期详解保姆级教程,结合spring boot和spring.xml两种方式讲解,5/7/10大小阶段详细分析

Spring Bean的生命周期

一、为什么知道 Bean 的生命周期?

生命周期的本质:在哪个时间节点上调用了哪个类的哪个方法?我们需要充分的了解在这个生命线上,都有哪些特殊的时间节点!只有我们知道了这些特殊的时间节点都在哪,到时候我们才可以确定代码写到哪。我们可能需要在某个特殊的时间节点上执行一段特定的代码,这段代码就可以放到这个节点上;当生命线走到这里的时候,自然会被调用。

二、生命周期大致了解

1、Spring Bean 的生命周期是指一个 Bean 在容器中从创建、初始化、销毁的全过程。

2、容器启动 ----> 实例化 Bean ----> 依赖注入 ----> 初始化前逻辑(BeanPostProcessor)----> 初始化(@PostConstruct/InitializingBean/init-method)----> 初始化后逻辑(BeanPostProcessor)----> 使用 Bean ----> 销毁(@PreDestory/DisposableBean/destroy-method

3、各阶段解析与方法:

阶段 描述 可插入的自定义方法/接口
实例化 容器通过反射创建 Bean 实例,但未设置属性或依赖 调用无参构造器创建对象
依赖注入 容器将依赖注入到 Bean 的属性中 通过依赖注入(例如 @Autowired、@Resource、XML 配置或 Java 配置)将属性注入到 Bean 中
初始化前 Bean 实例化和依赖注入后,执行初始化前的一些逻辑 实现 BeanPostProcessor 接口的 postProcessBeforeInitialization 方法
初始化 执行 Bean 的初始化逻辑 @PostConstruct、实现 InitializingBean、配置文件指定的 init-method 方法
初始化后 执行初始化后的一些逻辑 实现 BeanPostProcessor 接口的 postProcessAfterInitialization 方法
使用 Bean
销毁 容器关闭或 Bean 的生命周期结束时,执行销毁逻辑 @PreDestroy、实现 DisposableBean、配置文件指定的 destroy-method 方法

三、详细分析生命周期

3.1 ① 初步划分为 5 步:

第一步:实例化 Bean(调用无参数构造方法)
第二步:给 Bean 属性赋值(调用set方法)
第三步:初始化 Bean(会调用 Bean 的 init 方法。注意:这个 init 方法需要自己写)
第四步:使用 Bean
第五步:销毁 Bean(会调用 Bean 的 destroy 方法。注意:这个 destroy 方法需要自己写)

3.1.1 spring 框架中怎么理解

代码测试:spring.xml 版

1、定义一个 Bean:

public class User {
   
   
    private String username;

    public void setUsername(String username) {
   
   
        System.out.println("第二步:给对象的属性赋值");
        this.username = username;
    }

    public User() {
   
   
        System.out.println("第一步:实例化Bean,无参数构造方法执行了");
    }

    // 初始化Bean,需要自己写,自己配,方法名随意
    public void initBean() {
   
   
        System.out.println("第三步:初始化Bean");
    }

    // 销毁Bean,需要自己写,自己配,方法名随意
    public void destroyBean() {
   
   
        System.out.println("第五步:销毁Bean");
    }
    
    @Override
    public String toString() {
   
   
        return "User{" +
                "username='" + username + '\'' +
                '}';
    }
}

2、spring.xml 中配置:需要在 <bean>标签中 设置 init-methoddestroy-method 属性,手动指定初始化方法和销毁方法!

<bean id="user" class="全类名" init-method="initBean" destroy-method="destroyBean">
      <!--给属性赋值-->
     <property name="username" value="张三"/>
</bean>

3、开始测试:

@Test
public void test(){
   
   
    ApplicationContext applicationContext = new 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小学鸡!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值