SpringBean生命周期

bean是如何创建的

      bean本质上就是对象,创建bean使用构造方法完成

为什么bean默认为单例?

由于不会每次都新创建新对象所以有一下几个性能上的优势。
1、减少了新生成实例的消耗
新生成实例消耗包括两方面,第一,spring会通过反射或者cglib来生成bean实例这都是耗性能的操作,其次给对象分配内存也会涉及复杂算法。
2、减少jvm垃圾回收
由于不会给每个请求都新生成bean实例,所以自然回收的对象少了。
3、可以快速获取到bean
因为单例的获取bean操作除了第一次生成之外其余的都是从缓存里获取的所以很快。

bean的生命周期

  • 生命周期:从创建到消亡的完整过程
  • bean生命周期:bean从创建到销毁的整体过程
  • bean生命周期控制:在bean创建后的销毁前做一些事情

      在 Spring 中,Bean 的生命周期是一个很复杂的执行过程,我们可以利用 Spring 提供的方法定制 Bean 的创建过程。

      当一个 Bean 被加载到 Spring 容器时,它就具有了生命,而 Spring 容器在保证一个 Bean 能够使用之前,会进行很多工作。Spring 容器中 Bean 的生命周期流程如图 1 所示。
在这里插入图片描述

bean生命周期:

  • 初始化容器

    1. 创建对象(内存分配)
    2. 执行构造方法
    3. 执行属性注入(set操作)
    4. 执行bean初始化方法
  • 使用bean
    执行业务操作

  • 关闭/销毁容器
    执行bean销毁方法

Bean生命周期中的初始化容器

1. 简介

在Spring框架中,Bean的生命周期由Spring容器管理。在Bean的创建和销毁过程中,Spring容器提供了一系列的回调方法,用于在特定的生命周期阶段执行自定义的逻辑。其中,初始化容器是Bean生命周期的一个重要阶段,它包括了Bean的实例化、属性注入和初始化等操作。

2. 初始化容器的阶段

初始化容器的阶段包括以下几个步骤:

2.1 Bean的实例化

在初始化容器阶段,Spring容器会根据配置文件或注解等方式,创建Bean的实例。这个过程通常是通过调用Bean的构造函数来完成的。

2.2 属性注入

在Bean实例化之后,Spring容器会通过依赖注入的方式,将配置文件中或其他Bean中定义的属性值注入到Bean中。属性注入可以通过构造函数、Setter方法或字段注入的方式进行。

2.3 初始化方法的调用

在属性注入完成后,Spring容器会调用Bean的初始化方法。初始化方法可以通过实现InitializingBean接口的afterPropertiesSet()方法,或在配置文件中通过init-method属性指定。

3. 初始化容器的示例

以下是一个使用Spring框架的初始化容器的示例:

3.1 定义Bean

public class MyBean implements InitializingBean {

    private String name;

    public void setName(String name) {
        this.name = name;
    }

    public void afterPropertiesSet() throws Exception {
        System.out.println("Initializing Bean...");
        // 执行自定义的初始化逻辑
    }
}

3.2 配置文件

<bean id="myBean" class="com.example.MyBean" init-method="init">
    <property name="name" value="John" />
</bean>

3.3 初始化容器

public class MainApp {

    public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        MyBean myBean = (MyBean) context.getBean("myBean");
    }
}

4. 总结

初始化容器是Bean生命周期中的一个重要阶段,它包括了Bean的实例化、属性注入和初始化等操作。在Spring框架中,可以通过实现InitializingBean接口的afterPropertiesSet()方法或在配置文件中通过init-method属性指定初始化方法。通过合理使用初始化容器,可以在Bean的初始化阶段执行自定义的逻辑,例如初始化数据库连接、加载配置文件等。

Bean生命周期中的使用Bean阶段

1. 简介

在Spring框架中,Bean的生命周期由Spring容器管理。在Bean的创建和销毁过程中,Spring容器提供了一系列的回调方法,用于在特定的生命周期阶段执行自定义的逻辑。其中,使用Bean阶段是Bean生命周期的一个重要阶段,它包括了对其他Bean的引用和使用。

2. 使用Bean的阶段

使用Bean的阶段包括以下几个步骤:

2.1 Bean的实例化

在使用Bean的阶段,Spring容器会根据配置文件或注解等方式,创建Bean的实例。这个过程通常是通过调用Bean的构造函数来完成的。

2.2 属性注入

在Bean实例化之后,Spring容器会通过依赖注入的方式,将配置文件中或其他Bean中定义的属性值注入到Bean中。属性注入可以通过构造函数、Setter方法或字段注入的方式进行。

2.3 使用其他Bean

在属性注入完成后,Bean可以使用其他Bean提供的功能。通过依赖注入,Bean可以获取其他Bean的实例,并调用其方法或访问其属性。

2.4 销毁Bean

在使用Bean阶段结束后,Spring容器会调用Bean的销毁方法,进行资源的释放和清理工作。销毁方法可以通过实现DisposableBean接口的destroy()方法,或在配置文件中通过destroy-method属性指定。

3. 使用Bean的示例

以下是一个使用Spring框架的使用Bean阶段的示例:

3.1 定义Bean

public class MyBean {

    private OtherBean otherBean;

    public void setOtherBean(OtherBean otherBean) {
        this.otherBean = otherBean;
    }

    public void doSomething() {
        otherBean.doSomethingElse();
        // 使用其他Bean提供的功能
    }
}

3.2 配置文件

<bean id="myBean" class="com.example.MyBean">
    <property name="otherBean" ref="otherBean" />
</bean>

<bean id="otherBean" class="com.example.OtherBean" />

3.3 使用Bean

public class MainApp {

    public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        MyBean myBean = (MyBean) context.getBean("myBean");
        myBean.doSomething();
    }
}

4. 总结

使用Bean阶段是Bean生命周期中的一个重要阶段,它包括了对其他Bean的引用和使用。通过依赖注入,Bean可以获取其他Bean的实例,并调用其方法或访问其属性。通过合理使用使用Bean阶段,可以实现Bean之间的协作和功能的复用,提高系统的可维护性和扩展性。在Spring框架中,使用Bean阶段可以通过配置文件或注解等方式进行。

Bean生命周期中关闭/销毁容器

1. 简介

在Spring框架中,Bean的生命周期是由Spring容器管理的。在Bean的创建和销毁过程中,Spring容器提供了一系列的回调方法,用于在特定的生命周期阶段执行自定义的逻辑。其中,关闭/销毁容器是Bean生命周期的最后一个阶段,用于释放资源和执行清理工作。

2. 关闭/销毁容器的阶段

关闭/销毁容器的阶段包括以下几个步骤:

2.1 销毁Bean

在关闭/销毁容器的阶段,Spring容器会调用所有Bean的销毁方法,进行资源的释放和清理工作。销毁方法可以通过实现DisposableBean接口的destroy()方法,或在配置文件中通过destroy-method属性指定。

2.2 关闭容器

在所有Bean的销毁方法执行完毕后,Spring容器会关闭自身,释放资源。关闭容器的操作可以通过调用close()destroy()方法来完成。

3. 关闭/销毁容器的示例

以下是一个使用Spring框架的关闭/销毁容器的示例:

3.1 定义Bean

public class MyBean implements DisposableBean {

    @Override
    public void destroy() throws Exception {
        // 执行销毁操作,释放资源
    }
}

3.2 配置文件

<bean id="myBean" class="com.example.MyBean" destroy-method="destroy" />

3.3 关闭/销毁容器

public class MainApp {

    public static void main(String[] args) {
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        // 使用容器中的Bean
        // ...

        // 关闭容器
        context.close();
    }
}

4. 总结

关闭/销毁容器是Bean生命周期的最后一个阶段,用于释放资源和执行清理工作。在关闭/销毁容器的阶段,Spring容器会调用所有Bean的销毁方法,进行资源的释放和清理工作。销毁方法可以通过实现DisposableBean接口的destroy()方法,或在配置文件中通过destroy-method属性指定。在关闭/销毁容器之前,需要确保所有的Bean的销毁方法已经执行完毕。通过合理使用关闭/销毁容器的阶段,可以保证系统资源的释放和清理工作的完成,提高系统的可靠性和稳定性。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

杨思默

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

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

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

打赏作者

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

抵扣说明:

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

余额充值