Spring Bean的作用域及生命周期

这篇具有很好参考价值的文章主要介绍了Spring Bean的作用域及生命周期。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

前言:

Bean的作用域(Scope)

单例模式

原型模式(多例作用域)

请求作用域(request)

会话作用域

全局作用域

网络长连接

Spring执行流程

Bean的生命周期

测试

小结:


前言:

    使用Spring框架时,我们需要清楚Spring托管Bean的作用域和生命周期,这样使用框架才会更加得心应手。

Bean的作用域(Scope)

单例模式

    singleton(默认模式),出于性能考虑,单例模式只需要实例一次即可(浅拷贝)。每次使用的都是同一个对象。

    该作用域的下的Bean在IoC容器中只存在一个实例。获取Bean,通过applicationContext.getBean()等方法获取,或者使用注解装配Bean(@Autowired注入)都是同一个对象实例。

    通常无状态的Bean使用该模式(无状态表示Bean对象的属性不需要更新)。Spring默认使用该模式。

原型模式(多例作用域)

    prototype(多例模式),每次使用对象都需要创建Bean对象,互相都没关系(深拷贝)。

    每次该作用域下的请求Bean对象实例都会创建新的Bean,类似于多例模式。获取Bean,通过applicationContext.getBean()等方法获取,或者使用注解装配Bean(@Autowired注入)都是新的对象实例。

    通常有状态的Bean使用该作用域,Bean的属性可能会更新。

请求作用域(request)

    每次HTTP请求,都会创建一个Bean对象(适用于 Spring MVC),类似于prototype模式。

    一次HTTP请求和响应是共享同一个Bean对象实例。

会话作用域

    每次Session会话共享一个Bean,例如记录用户的登录信息(适用于 Spring MVC)。在一个 http session 中,定义一个Bean实例。

全局作用域

    application,一个http servlet context 中共享同一个Bean(适用于 Spring MVC)。

    在一个http servlet context 中,定义一个Bean对象实例。Web应用的上下文信息,例如记录一个应用的共享信息。

网络长连接

    WebSocket,只适用于Spring WebSocket。在一个HTTP WebSocket的生命周期中(一次长连接),定义一个Bean实例。

    WebSocket的每次会话中,保存了一个Map结构的头信息,用来保存客户端消息头。第一次初始化后,直到一次长连接结束都是用一个Bean。

注意:

    可以在Spring配置文件中使用scpoe属性设置相应Bean的作用域。

Spring执行流程

    1)启动容器。加载配置文件,spring-config.xml文件。

    2)根据配置完成Bean实例化,初始化(分配内存空间,从无到有,初始化空间)。扫描配置文件下带有五大类或者方法注解,进行Bean初始化。

    3)注册Bean到Spring容器中。

    4)注入Bean的属性。(@Autowired@Resource)。

Bean的生命周期

    宏观上来谈,Bean的生命周期就是从诞生到销毁的过程。

1)开辟内存空间(实例化)

2)设置属性(注入属性)

3)初始化

  • 各种通知(对象的哪个属性初始化完成了)
  • 初始化前置方法
  • 初始化方法(两种实现方式:xml方式,注解方式)
  •  初始化后置方法

4)使用Bean

5)销毁Bean对象

注意:

    设置属性必须在初始化之前,因为有可能在初始化的时候使用Bean。

测试

package com.spring.demo.component;

import org.springframework.beans.factory.BeanNameAware;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;

public class BeanComponent implements BeanNameAware {

    @Override
    public void setBeanName(String s) {
        System.out.println("执行了通知 -> " + s);
    }

    // xml初始化
    public void myInit() {
        System.out.println("xml方式初始化");
    }

    @PostConstruct
    public void doPostConstruct() {
        System.out.println("注解初始化");
    }

    public void hello() {
        System.out.println("hello");
    }

    @PreDestroy
    public void doPreDestroy() {
        System.out.println("执行了 doPreDestroy");
    }


}

    Spring配置文件,将Bean手动存储在Spring容器中。

<bean id="beanComponent" class="com.spring.demo.component.BeanComponent" init-method="myInit"></bean>

运行结果

Spring Bean的作用域及生命周期

注意:

    可以清楚看见Bean生命周期所做的一些事情(这里使用了两种初始化的方式)。

小结:

    Spring手动添加Bean和通过getBean()获取Bean的方式太麻烦,因此有了Spring Boot,就是Spring脚手架。目的就是更加方便的使用Spring容器,后续文章会详细介绍。文章来源地址https://www.toymoban.com/news/detail-438029.html

到了这里,关于Spring Bean的作用域及生命周期的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Spring】Bean的作用域与生命周期详情:请简述Spring的执行流程并分析Bean的生命周期?

     我们都知道,Spring框架为开发人员提供了很多便捷,这使得开发人员能够更加专注于应用程序的核心业务逻辑,而不需要花费大量时间和精力在技术细节上。作为一个包含众多工具方法的IoC容器,存取JavaBean是其极为重要的一个环节。本文就对Spring中的Bean的作用域和生命周

    2024年02月12日
    浏览(38)
  • Bean 作用域、生命周期和Spring执行流程

    假设现在有⼀个公共的 Bean,提供给 A ⽤户和 B ⽤户使⽤,然⽽在使⽤的途中 A ⽤户却“悄悄”地修改了公共 Bean 的数据,导致 B ⽤户在使⽤时发⽣了预期之外的逻辑错误。 我们可以看到,B 用户在使用这个Bean对象时,得到的Dog是被A 用户修改过的,这无疑会给 B 用户带来很

    2024年02月12日
    浏览(35)
  • 【Spring】Bean的作用域和生命周期

    目录 一、引入案例来探讨Bean的作用域 二、Bean的作用域 2.1、Bean的6种作用域 2.2、设置Bean的作用域 三、Spring的执行流程  四、Bean的声明周期 1、生命周期演示 首先我们创建一个User类,定义一个用户信息,在定义一个Users类,使用方法注解将user存入Spring中,然后两个用户A对这

    2024年02月14日
    浏览(32)
  • Spring Bean的作用域和生命周期

    Bean 的作用域指的是 Bean 在 Spring 容器中的行为(Bean 实例创建及生命周期),它的行为是由 Spring 来管理的,可以根据具体情况选择不同的作用域来达到性能优化、资源利用最大化和可维护性等目的。 Bean 作用域(Scope)类型主要有如下几种: 其中前两种是 Spring 核心作用域,

    2024年02月12日
    浏览(44)
  • Spring中Bean的作用域和Spring生命周期

    从前面的文章中我们看出Spring是用来存储和读取Bean的,因此Spring中Bean是最核心的资源,所以我们将对Bean进行深入的理解。 现在有一个公共的Bean,提供给了两个用户去使用,但是在使用过程中,用户一修改了公共的Bean数据,当用户2在使用时,却发现产生了逻辑上的错误。

    2024年02月16日
    浏览(34)
  • 5、Spring之bean的作用域和生命周期

    5.1.1.1、配置bean 注意:当bean不配置scope属性时,默认是singleton(单例) 5.1.1.2、测试 由控制台日志可知,此时ioc获取到的两个bean本质上是同一个对象 5.1.2.1、配置bean 5.1.2.2、测试 由控制台日志可知,此时ioc获取到的两个bean本质上是不同的对象 如果是在WebApplicationContext环境下

    2024年02月14日
    浏览(30)
  • Spring系列4 -- Bean的作用域和生命周期

    目录 1. 案例 2. 作用域定义 2.1 Bean的6种作用域 2.2 设置作用域 3. Sring的执行流程 4. Bean的生命周期 思考: 为什么不是先进行初始化然后再进行设置属性呢?         假设现在有⼀个公共的 Bean,提供给 A ⽤户和 B ⽤户使⽤,然⽽在使⽤的途中 A ⽤户却“悄悄”地修改了公共

    2024年02月15日
    浏览(27)
  • 【JavaEE】深入了解Spring中Bean的可见范围(作用域)以及前世今生(生命周期)

    【JavaEE】Spring的开发要点总结(4) 在学习Spring中,Bean是最核心的操作资源 使用学习Bean对象是一个重点,我们已经知道如何存储它,获取它,现在我们要知道: 它的作用域,我们才可以知道怎么使用,才能得心应手,符合预期~ 它的生命周期,我们才能更加清楚的了解它的

    2024年02月14日
    浏览(36)
  • 【Spring学习】Bean对象的作用域和生命周期,了解了这些你就真正熟悉spring框架了.

    前言: 大家好,我是 良辰丫 ,我们已经学会了Spring的存取,今天我们将一起来学习Bean对象的作用域和生命周期.💌💌💌 🧑个人主页:良辰针不戳 📖所属专栏:javaEE进阶篇之框架学习 🍎励志语句:生活也许会让我们遍体鳞伤,但最终这些伤口会成为我们一辈子的财富。 💦期

    2024年02月07日
    浏览(52)
  • @Autowired和@Resource注解之间的关系区别,Bean的作用域和生命周期,Spring的执行流程

    目录 一. @Autowired 和 @Resource 注解 二. Bean的作用域  1. singleton(单例模式) 2. prototype(原型模式)(多例模式) 3. 请求作用域:request 4. 会话作用域:session 三. Spring 的执行流程 四. Bean 的生命周期   1. 实例化  2. 设置属性  3. Bean 初始化      3.1 执行各种各种 Aware 通知;     

    2024年02月04日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包