在 Web 环境中,request、session、application 这些作用域是做什么的?

四大作用域(request,session,application,pagecontext) 应用程序作用域是最大范围的作用域,表示数据在整个Web应用程序中有效,因此只要服务器不关闭,服务器上的工程不移除,不重新其中,application对象就一直存在(即Tomcat服务器不关闭的话,数据就是一直都有效的):表示用户在会话开始的时候创建,在用户关闭浏览器或者会话过期后销毁,一次请求结束之后,跳转到其他界面,只要对应的浏览器没有关闭,session域就不会关闭,就还是可以从中取数据。:数据存储在ServletContext对象中,在Web应用程序启动的时候创建,在应用程序关闭的时候销毁。 阅读详情

当你的 Spring 应用是一个 Web 应用时(例如,一个 Spring Boot 项目使用了 spring-boot-starter-web),IoC 容器(WebApplicationContext)就能理解并支持这几种额外的、与 Web 流程紧密相关的 Bean 作用域。

它们的核心目的都是为了在 Web 环境下,以一种解耦的方式,安全、方便地管理和共享状态数据。


request 作用域:一次请求的“记事本”

  • 一句话概括:为每一次独立的 HTTP 请求,创建一个全新的 Bean 实例。

  • 生命周期:

    • 创建:当一个 HTTP 请求到达服务器时创建。
    • 销毁:当该请求处理完毕并返回响应时销毁。
  • 核心用途:存放仅与当前这次请求相关的数据,避免通过方法参数在 Controller -> Service -> Repository 之间层层传递。

  • 典型场景:

    1. 存储当前用户信息:在请求开始时,通过拦截器或过滤器解析 Token,将用户信息存入一个 request 作用域的 Bean 中。之后,在业务逻辑的任何地方,都可以直接注入这个 Bean 来获取当前操作员的信息,代码非常干净。
    2. 封装请求参数:将复杂的请求参数封装成一个 request 作用域的 Bean,方便在不同层级使用。
  • 代码示例:

    import org.springframework.stereotype.Component;
    import org.springframework.web.context.annotation.RequestScope;
    
    @Component
    @RequestScope // 或者使用字符串 @Scope("request")
    public class CurrentUserContext {
        private String userId;
        private String userName;
        // ... getters and setters
    }
    
    // 在 Service 中使用
    @Service
    public class OrderService {
        @Autowired
        private CurrentUserContext currentUserContext;
    
        public void createOrder() {
            String userId = currentUserContext.getUserId(); // 直接获取,无需参数传递
            System.out.println("用户 " + userId + " 正在创建订单...");
            // ...
        }
    }
    

session 作用域:一次会话的“购物车”

  • 一句话概括:为每一个独立的用户会话(HTTP Session),创建一个全新的 Bean 实例。

  • 生命周期:

    • 创建:当服务器为某个用户首次创建 HttpSession 时创建。
    • 销毁:当 HttpSession 失效时(用户关闭浏览器、会话超时、手动销毁)销毁。
  • 核心用途:存放需要跨越用户单次访问中多次请求的共享数据。

  • 典型场景:

    1. 购物车:这是最经典的例子。用户在浏览商品时,不断地将商品加入购物车,这个购物车的状态需要在他关闭浏览器之前一直保持。
    2. 用户登录状态:用户登录后,其登录信息可以保存在 session 作用域的 Bean 中,以便在后续的每次请求中验证其身份。
    3. 多步骤表单:用户填写一个复杂表单,分好几页提交。每一步的数据都可以暂存在 session 作用域的 Bean 中,直到最后一步完成。
  • 代码示例:

    import org.springframework.stereotype.Component;
    import org.springframework.web.context.annotation.SessionScope;
    
    @Component
    @SessionScope // 或者使用字符串 @Scope("session")
    public class ShoppingCart {
        private final List<Product> items = new ArrayList<>();
        
        public void addProduct(Product product) {
            this.items.add(product);
        }
        // ...
    }
    

application 作用域:整个应用的“公告板”

  • 一句话概括:为整个 Web 应用(ServletContext),创建一个全局唯一的 Bean 实例。

  • 生命周期:

    • 创建:当 Web 应用启动时(ServletContext 初始化时)创建。
    • 销毁:当 Web 应用关闭时销毁。
  • 核心用途:存放整个应用程序生命周期内全局共享的、不经常变动的数据。它和 singleton 非常相似,但它的生命周期是与 ServletContext 绑定的。

  • 典型场景:

    1. 应用级别的配置信息:从数据库或配置文件中加载一次,供整个应用使用。
    2. 全局计数器:例如网站总访问量统计。
    3. 缓存不常变的数据:比如全国省份列表、数据字典等,应用启动时加载到内存,避免频繁查询数据库。
  • 代码示例:

    import org.springframework.stereotype.Component;
    import org.springframework.web.context.annotation.ApplicationScope;
    
    @Component
    @ApplicationScope // 或者使用字符串 @Scope("application")
    public class AppConfig {
        private Map<String, String> globalSettings;
        
        @PostConstruct
        public void load() {
            // 应用启动时,从数据库加载全局设置
            this.globalSettings = loadFromDatabase();
        }
        // ...
    }
    

一个重要的问题:为什么需要 proxyMode?

你可能在很多示例代码中看到 @Scope 注解和 proxyMode 一起使用:
@Scope(value = "request", proxyMode = ScopedProxyMode.TARGET_CLASS)

原因:生命周期不匹配。

思考一个场景:一个 singleton 的 OrderService (应用启动时创建) 注入了一个 request 作用域的 CurrentUserContext (每次请求时才创建)。

  • 问题:当 OrderService 这个单例 Bean 在应用启动时被创建和注入依赖时,HTTP 请求还不存在,所以 CurrentUserContext 根本就没被创建。Spring 应该注入什么呢?
  • 解决方案:proxyMode 就是答案。当设置了 proxyMode,Spring 不会直接注入 CurrentUserContext 的实例。相反,它会注入一个代理对象(Proxy)。
    • 这个代理对象是单例的,可以被安全地注入到 OrderService 中。
    • 当你通过 OrderService 调用 currentUserContext.getUserId() 时,你实际上是在调用这个代理的方法。
    • 这个代理会实时地从当前的 HTTP 请求中查找真正的 CurrentUserContext 实例,然后将方法调用委托给这个真实的实例。

简单来说,代理就像一个聪明的中间人,它解决了“快生命周期”的 Bean 无法被注入到“慢生命周期”的 Bean 中的问题。 对于 request 和 session 作用域,当它们被注入到 singleton Bean 中时,几乎总是需要使用代理模式。

总结对比

作用域范围生命周期共享级别典型用例
singletonSpring IoC 容器容器启动到关闭所有请求、所有会话无状态 Service, DAO, 配置类
request一次 HTTP 请求请求开始到结束同一请求内的所有组件当前用户信息、请求参数
session一个用户会话会话创建到失效同一用户会话内的所有请求购物车、用户登录状态
application整个 Web 应用应用启动到关闭所有用户、所有会话全局配置、全局缓存、计数器
10-HTTP-Request共享数据(域对象)、request域 需要注意的是,在 JSP 页面中,如果要使用 setAttribute() 方法存储数据,则应该调用 pageContext.setAttribute() 方法,而非 request.setAttribute() 方法。其中,属性名和属性值是该方法的两个参数,属性名表示存放数据的名称,属性值表示要存放的具体数据。此时,"username" 变量中就存放了 Request 域中存储的值,可以在同一个请求处理过程中传递给其他 Servlet 或 JSP 页面,并且可以在后面的代码中对其进行操作。 阅读详情

相关推荐

spring框架学习 - spring IoC 之 Bean 作用域

接上一篇博客:https://blog.youkuaiyun.com/qq_43605444/article/details/121944382?spm=1001.2014.3001.5502 6、Bean 作用域 创建 bean 定义时,您将创建一个配方,用于创建由该 bean 定义定义的类的实际实例。 bean 定义是一个配方的想法很重要,因为这意味着,与类一样,您可以从单个配方创建许多对象实例。 您不仅可以控制要插入到从特定 bean 定义创建的对象中的各种依赖项和配置值,还可以控制从特定 bean 定义创建的对

TyuIn的博客 596

jsp 的四个作用域 :page、request、session和application的区别 .

1、区别: 1.page指当前页面有效。在一个jsp页面里有效 2.request 指在一次请求的全过程中有效,即从http请求到服务器处理结束,返回响应的整个过程,存放在HttpServletRequest对象中。在这个过程中可以使用forward方式跳转多个jsp。在这些页面里你都...

chimu9074的博客 1239

DIY音乐播放器:用VS1053模块+Arduino打造你的专属MP3播放器(附完整代码)

本文详细介绍了如何使用VS1053音频解码模块与Arduino开发板,从零开始构建一个功能完备的桌面级MP3播放器。内容涵盖硬件架构设计、SPI总线共享、底层驱动编写、双缓冲区数据流管理以及用户交互实现,并提供完整的代码示例与性能优化建议,帮助创客打造高度可定制的专属音乐播放设备。

weixin_29189003的博客 287

request 和 session 的区别联系

文章目录一、request二、session三、比较四、常见使用 一、request request范围较小一些,只是一个请求。 request对象的生命周期是针对一个客户端(说确切点就是一个浏览器应用程序)的一次请求,当请求完毕之后,request里边的内容也将被释放点 简单说就是你在页面上的一个操作,request.getParameter() 就是从上一个页面中的url、form中获取参数。...

南淮北安的博客 1万+

用STM32的SPI接口读取MT6835磁编码器,手把手教你避开数据读取的坑

本文详细介绍了如何使用STM32的SPI接口读取MT6835磁编码器,并提供了21个实战细节与避坑指南。从硬件连接、SPI配置到数据解析和实时调试,全面解析了读取位置信息过程中的常见问题及解决方案,帮助工程师在工业控制、伺服电机等场景中高效应用AMR技术。

weixin_30729609的博客 1441

arcgis select by attributes一次选多个_视频:如何基于ArcGIS与GeoDa求莫兰指数和绘制莫兰散点图?...

莫兰指数是全域莫兰指数(Global Moran's I)的简称,是澳大利亚统计学家帕特里克·阿尔弗雷德·皮尔斯·莫兰(Patrick Alfred Pierce Moran),在1950年提出的。详细介绍,如下:莫兰指数取值范围在-1.0至1.0之间。当Moran's I >0时,表示空间正相关性,其值越大,空间相关性越明显;当Moran's I <0时,表示空间负相关性...

weixin_39948247的博客 1760

session等作用域

作用域分为四种,其中常用的只有两种: page:页面级作用域,基本用不到 request:请求级作用域,当服务器产生响应时,请求作用域销毁 sessoin:会话级作用域,保证在多次交互过程中,回话作用域始终存在 application:应用级作用域,只要服务器不关闭,一直存在(在Spring框架中会用到这个) 000000000000分隔符00000000000 今天整理的是session作用域(...

ykallan的博客 8348

tcl脚本语言之file的常见用法

这些命令覆盖了从文件属性获取、修改、复制、删除、路径处理等广泛的文件操作需求。命令用于处理文件系统操作。

hzmscut的博客 5149

详解Spring原理之Bean的作用域

详解Bean的作用域,包括singleton,prototype,request,session,application,websocket.

. 1万+

浪潮服务器ESXI6.7部署实战:手动集成RAID驱动避坑指南

本文详细介绍了在浪潮服务器上部署ESXI6.7时手动集成RAID驱动的完整流程和避坑指南。从驱动获取、解压技巧到封装实战,逐步解决国产服务器常见的驱动缺失问题,特别针对PM8060 RAID卡提供具体解决方案,帮助IT运维人员顺利完成ESXI部署。

weixin_33725722的博客 462

LVGL在RTOS下的线程安全实践:从卡死到流畅的界面切换

本文探讨LVGL在RTOS环境下的线程安全实践,重点分析FreeRTOS多任务同步机制,包括互斥锁、任务通知和消息队列方案。通过实际案例展示如何避免界面卡顿和系统死锁,实现从卡死到流畅的界面切换,为嵌入式GUI开发提供可靠的适配解决方案。

uran的专栏 1111

Spring Bean的作用域

在Spring中,bean作用域用于确定哪种类型的bean实例应该从Spring容器中返回给调用者。 目前Spring Bean的作用域或者说范围主要有五种。 作用域 描述 singleton 在springIoC容器仅存在一个Bean实例,Bean以单例方式存在,bean作用域范围的默认值。 prototype 每次从容器中调用Bean时,都返回一个新的实例,即每次调用getBean()时,相当于执行newXxxBean()。 request 每次HTTP请求都会.

小猪呀的博客 448

SPMI总线协议(一)

系统电源管理接口( System Power Management Interface简称SPMI)是一种双线串行接口,用于连接片上系统(SoC)处理器系统的集成电源控制器(PC)与一个或多个电源管理集成电路(PMIC)电压调节系统。SPMI 使系统能够使用单个 SPMI 总线动态调整 SoC 内部电压域的电源和衬底偏置电压。移动设备和其他便携式设计正日益采用系SPMI)协议,实现多主多从系统,根据实时系统需求监测和动态控制供电电压。设计人员可以在系统级实现更低的功率。

qflook的博客 887

【SpringBoot笔记10】Spring中Bean的6种作用域

参考:官方文档 1 Bean的作用域 在Spring Framework中,总共定义了6种bean 的作用域,其中有4种作用域只有当应用为web应用的时候才有效,并且Spring还支持自定义作用域。 下表描述了这6种作用域: Scope Description singleton (默认的)在每个Spring IoC容器中,一个bean定义对应只会有唯一的一个bean实例。 ...

西瓜游侠的博客 9847

贝叶斯(Bayes)决策理论

在博文【模式识别PR和模式的概念】介绍了相关的模式识别与模式的概念。在本节描述所要讨论的问题之前,再提一下对于待识别的物理对象的描述问题。假设一个待识别的物理对象用其d个属性观察值描述,称之为d个特征,这组成一个d维的特征向量,而这d维待征所有可能的取值范围则组成了一个d维的特征空间。一般地,机器实现自动分类有两大类方法:一种是模板匹配方法,另一种是对特征空间划分为子空间(每类的势力范围)的方法。

松子茶的专栏 3万+

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Spring Bean 的作用域

Bean 的作用域(Bean Scope) Bean scopes Scope Description singleton (Default) Scopes a single bean definition to a single object instance for each Spring IoC container. prototype Scopes a single b...

u013177658的博客 130

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

spring学习笔记五(bean的作用域)

bean的作用域 一、单例(singleton)、属性(prototype) 作用域   ①、singleton       单例、同一个spring上下文中只会存在一个对象,当未对Bean作用域进行设置时,默认为sigleton。    ②、prototype       多例模式,每当需要去获取一个该Bean时,spring便会新建一个。而不是使用之前的。 ...

weixin_30678349的博客 88

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

spring bean的作用域

spring容器中bean有五种作用域 - singleton单例:这种 bean 范围是默认的,这种范围确保不管接受到多少个请求,每个容器中只有一个 bean 的实例,单例的模式由 bean factory 自身来维护,在加载spring配置文件时就会创建对象 - prototype原型:原型范围与单例范围相反,为每一个 bean 请求提供一个实例,在调用getBean方法的时候才会创建 - request请求:在请求 bean 范围内会每一个来自客户端的网络请求创建一个实例,在请求完成以后,bean 会

Lxn2zh的博客 432

关于Bean的作用域

目录 一、singleton 二、prototype 三、request 四、session 五、application 六、websocket Spring 容器在初始化一个 Bean 的实例时,同时会指定该实例的作用域。Spring有6个作用域,最后四种是基于Spring WebMVC生效: 一、singleton 官方说明:(Default)ScopesasinglebeandefinitiontoasingleobjectinstanceforeachSp...

qq_42803467的博客 260

Spring--Bean的作用域

介绍Spring中常见的作用域scope,以及如何自定义作用域。

m0_67975400的博客 226

Spring Core 之 Bean Scopes(Bean的作用域)

文章目录一、Bean Scopes Overview二、The Singleton Scope三、The Prototype Scope四、Singleton Beans with Prototype-bean Dependencies 生词汇总 bake ------------------------------------ 烤, 烘, 烘烤 as a rule ------------------------------ 通常 contrast -----------------------

qq_38515961的博客 430

Bean的作用域

1.singleton:单例作用域.2.prototype:原型作用域(多例作用域).3.request:请求作用域.4.session:回话作用域.5.application:全局作用域.6.websocket:HTTP WebSocket作用域.后四种是Spring MVC 的值,普通的spring项目中只有前两种.singleton:默认作用域,获取Bean和装配Bean都是对同一个对象.prototype:每次对作用域下的B二胺请求都是新的实例.

weixin_57463784的博客 813

Spring Bean作用域简介

按照spring官网说明,分成如下五种 Scope Description singleton (Default) Scopes a single bean definition to a single object instance for each Spring IoC container. prototype Scopes a single bean definition to any number of o..

天涯君落 813

Spring框架中Bean的作用域详解

在 Spring 框架中,Bean 的作用域定义了 Bean 实例的生命周期和可见范围。合理选择作用域可以优化应用性能、确保线程安全并正确管理资源。通过合理配置 Bean 的作用域,可有效提升应用性能和可维护性,避免常见的线程安全和内存泄漏问题。Spring 提供了多种作用域选项,其中最常用的是。,其他作用域需在 Web 环境中使用。

zty0721的博客 1046
上一篇: Spring IoC singleton 和 prototype 有什么核心区别?分别在什么场景下使用?
下一篇: 如果一个接口有多个实现类,@Autowired 时会发生什么?如何解决?
冰糖心书房
博客等级 码龄15年 6017粉丝 690原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

打赏作者

冰糖心书房

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

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

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

打赏作者

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

抵扣说明:

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

余额充值