Bean 的六种作用域

Bean 的六种作用域

  • .
  • Bean的作用域
  • 属性注入和content获取Bean
    • 单例作用域:http://127.0.0.1:8080/single1
    • 多例作用域: http://127.0.0.1:8080/prototype
    • 请求作用域: http://127.0.0.1:8080/request
    • 会话作用域: http://127.0.0.1:8080/session
    • Application作用域: http://127.0.0.1:8080/application

.

在这里插入图片描述

Bean的作用域

作用域说明
singleton单例作用域, 每个Spring IoC容器内同名称的bean只有⼀个实例(单例)(默认)
prototype原型作用域,每次使用该bean时会创建新的实例(非单例)
request请求作用域 ,每个HTTP 请求生命周期内, 创建新的实例(web环境中)
session会话作用域 ,每个HTTP Session生命周期内, 创建新的实例(web环境中)
application全局作用域,每个ServletContext生命周期内, 创建新的实例(web环境中)
websocketHTTP WebSocket 作用域 ,每个WebSocket生命周期内, 创建新的实例(web环境中)
package com.example.demo.config;import com.example.demo.model.User;
import org.springframework.beans.factory.config.ConfigurableBeanFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Scope;
import org.springframework.web.context.annotation.ApplicationScope;
import org.springframework.web.context.annotation.RequestScope;
import org.springframework.web.context.annotation.SessionScope;@Configuration
public class BeanConfig {@Bean@Scope(ConfigurableBeanFactory.SCOPE_SINGLETON)public User single1(){return new User();}@Beanpublic User single2(){return new User();}@Bean@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)public User prototype(){return new User();}@Bean@RequestScopepublic User request(){return new User();}@Bean@SessionScopepublic User session(){return new User();}@Bean@ApplicationScopepublic User application(){return new User();}
}
package com.example.demo.controller;import com.example.demo.model.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class UserController {@Autowiredprivate User single1;@Autowiredprivate User single2;@Autowiredprivate User prototype;@Autowiredprivate User request;@Autowiredprivate User session;@Autowiredprivate User application;@AutowiredApplicationContext applicationContext;@RequestMapping("/single1")public String single1(){User user = (User) applicationContext.getBean("single1");return user.toString()+single1.toString();}@RequestMapping("/single2")public String single2(){User user = (User) applicationContext.getBean("single2");return user.toString()+single2.toString();}@RequestMapping("/prototype")public String prototype(){User user = (User) applicationContext.getBean("prototype");return user.toString()+prototype.toString();}@RequestMapping("/request")public String request(){User user = (User) applicationContext.getBean("request");return user.toString()+request.toString();}@RequestMapping("/session")public String session(){User user = (User) applicationContext.getBean("session");return user.toString()+session.toString();}@RequestMapping("/application")public String application(){User user = (User) applicationContext.getBean("application");return user.toString()+application.toString();}
}

属性注入和content获取Bean

我们可以通过浏览器可以访问上述代码中的url,每个请求都至少请求两次
可以得到以下结论:

单例作用域:http://127.0.0.1:8080/single1

多次访问, 得到的都是同⼀个对象, 并且 @Autowired 和applicationContext.getBean() 也是同⼀个对象.
在这里插入图片描述

多例作用域: http://127.0.0.1:8080/prototype

applicationContext.getBean()每次获取的对象都不⼀样,属性注入的对象在Spring容器启动时, 就已经注入了, 所以多次请求也不会发生变化
在这里插入图片描述
在这里插入图片描述

请求作用域: http://127.0.0.1:8080/request

在每⼀次请求中, @Autowired 和 applicationContext.getBean() 都是同⼀个对象.
但是每次请求, 都会重新创建对象
在这里插入图片描述
在这里插入图片描述

会话作用域: http://127.0.0.1:8080/session

在⼀个session中, 多次请求, 获取到的对象都是同⼀个
在这里插入图片描述
换⼀个浏览器访问, 发现会重新创建对象.(另⼀个Session)
在这里插入图片描述

Application作用域: http://127.0.0.1:8080/application

在⼀个应用中, 多次访问都是同⼀个对象,即使是不同的浏览器
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/461305.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PSM-Net根据Stereo图像生成depth图像

一、新建文件夹 在KITTI数据集下新建depth_0目录 二、激活anaconda环境 conda activate pt14py37三、修改submission.py文件 3.1 KITTI数据集路径 parser.add_argument(--datapath, default/home/njust/KITTI_DataSet/00/, helpselect model)3.2 深度图像输出路径 save…

c++2024寒假J312实战班2.4

长话短说,简明扼要一直是我的行事风格,如有不精准的地方,就到网上去搜,好吧。 今天分享我们做的四道题,都挺简单的,就是难思考。 题目列表: 1.Maximum Subarray Sum 2.分解因数 3.公交换乘 4.…

【蓝桥杯单片机记录】IO基础与LED控制

目录 一、IO基础 1.1 IAP15F2K61S2芯片原理图 1.2不同工作模式 二、新建工程的一些补充 2.1 keil中没有IAP15F2K61S2的头文件 解决:在isp软件中找到如下​编辑 2.2keil中的芯片选择 2.3推荐字体 三、sbit关键字 四、LED控制 4.1原理图 4.2不能直接通过IO…

宋小黑原创高清壁纸分享之蓝白云海

大家好,我是小黑,最近迷上了制作壁纸,哈哈,给大家分享一波,小黑做的美图~ 本期给大家分享的是,小黑原创的蓝白云海主题系统壁纸~ 厌倦了一成不变的壁纸吗? 感到学习负担过重吗? …

机器人学、机器视觉与控制 上机笔记(第一版译文版 2.1章节)

机器人学、机器视觉与控制 上机笔记(第一版译文版 2.1章节) 1、前言2、本篇内容3、代码记录3.1、新建se23.2、生成坐标系3.3、将T1表示的变换绘制3.4、完整绘制代码3.5、获取点*在坐标系1下的表示3.6、相对坐标获取完整代码 4、结语 1、前言 工作需要&a…

【cmu15445c++入门】(7)C++ auto 关键字

一、auto关键字介绍 C auto 关键字是一个关键字,它告诉编译器通过其初始化表达式推断声明变量的类型。它可以提高开发人员的效率(开发人员不再需要输入冗长、不守规矩的类型名称)。它在 for-each 循环的上下文中也很有用。但是,使…

Ubuntu 22 部署Zabbix 6.4

一、安装及配置postgresql sudo apt-get update sudo apt-get install postgresql postgresql-client 修改配置文件,配置远程访问:(PostgreSQL安装路径下的data,也是安装时data的默认路径)data目录下的 pg_hba.conf …

CTFshow web(php命令执行 45-49)

基础知识&#xff1a; 1.绕过cat使用&#xff1a; tac more less head tac tail nl od(二进制查看) vi vim sort uniq rev 2.绕过空格用&#xff1a; %09 <> ${IFS} $IFS$ {cat,fl*} %20 注&#xff1a; %09 ##&#xff08;Tab&#xff09; %20 ##&#xff08;spa…

“智能检测,精准把控。温湿度检测系统,为您的生活带来全方位的健康保障。”#非标协议项目【上】

“智能检测&#xff0c;精准把控。温湿度检测系统&#xff0c;为您的生活带来全方位的健康保障。”#非标协议项目【上】 前言预备知识1温湿度检测系统需求2.代码整合2.1找到编程实现LCD1602显示一行工程&#xff0c;打开代码文件&#xff0c;将所需的LCD1602驱动代码拷贝到温湿…

FastDFS 分布式集群搭建详解

文章目录 前言1、整体架构2、安装配置FastDFS集群2.1 配置tracker2.2 配置storage 3、启动集群4、查看集群情况5、nginx配置5.1 配置storage的四台机器的nginx5.2 配置tracker的两台机器的nginx5.3 配置统一入口 前言 阅读本文章之前请先看上一篇单机版FastDFS安装配置详解&am…

【工作学习 day04】 9. uniapp 页面和组件的生命周期

问题描述 uniapp常用的有&#xff1a;页面和组件&#xff0c;并且页面和组件各自有各自的生命周期函数&#xff0c;那么在页面/组件请求数据时&#xff0c;是用created呢&#xff0c;还是用onLoad呢&#xff1f; 先说结论: 组件使用组件的生命周期&#xff0c;页面使用页面的…

机器学习 | 深入集成学习的精髓及实战技巧挑战

目录 xgboost算法简介 泰坦尼克号乘客生存预测(实操) lightGBM算法简介 《绝地求生》玩家排名预测(实操) xgboost算法简介 XGBoost全名叫极端梯度提升树&#xff0c;XGBoost是集成学习方法的王牌&#xff0c;在Kaggle数据挖掘比赛中&#xff0c;大部分获胜者用了XGBoost。…