前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >spring中的scope详解

spring中的scope详解

作者头像
二十三年蝉
发布于 2018-08-01 02:29:34
发布于 2018-08-01 02:29:34
9990
举报
文章被收录于专栏:闻道于事闻道于事

spring容器中的bean默认是单例模式的,改成非单例模式需要在类上加上@Scope("prototype")

1. scope概论

spring中scope是一个非常关键的概念,简单说就是对象在spring容器(IOC容器)中的生命周期,也可以理解为对象在spring容器中的创建方式。

2. scope历史及分类

目前,scope的取值有5种取值:

在Spring 2.0之前,有singleton和prototype两种;

在Spring 2.0之后,为支持web应用的ApplicationContext,增强另外三种:request,session和global session类型,它们只实用于web程序,通常是和XmlWebApplicationContext共同使用。

3.单个scope详解

 1)singleton (单一实例)

 此取值时表明容器中创建时只存在一个实例,所有引用此bean都是单一实例。如同每个国家都有一个总统,国家的所有人共用此总统,而这个国家就是一个spring容器,总统就是spring创建的类的bean,国家中的人就是其它调用者,总统是一个表明其在spring中的scope为singleton,也就是单例模型。

此外,singleton类型的bean定义从容器启动到第一次被请求而实例化开始,只要容器不销毁或退出,该类型的bean的单一实例就会一直存活,典型单例模式,如同servlet在web容器中的生命周期。

2)prototype

spring容器在进行输出prototype的bean对象时,会每次都重新生成一个新的对象给请求方,虽然这种类型的对象的实例化以及属性设置等工作都是由容器负责的,但是只要准备完毕,并且对象实例返回给请求方之后,容器就不在拥有当前对象的引用,请求方需要自己负责当前对象后继生命周期的管理工作,包括该对象的销毁。也就是说,容器每次返回请求方该对象的一个新的实例之后,就由这个对象“自生自灭”,最典型的体现就是spring与struts2进行整合时,要把action的scope改为prototype。

如同分苹果,将苹果的bean的scope属性声明为prototype,在每个人领取苹果的时候,我们都是发一个新的苹果给他,发完之后,别人爱怎么吃就怎么吃,爱什么时候吃什么时候吃,但是注意吃完要把苹果核扔到垃圾箱!对于那些不能共享使用的对象类型,应该将其定义的scope设为prototype。

3)request

再次说明request,session和global session类型只实用于web程序,通常是和XmlWebApplicationContext共同使用。

<bean id ="requestPrecessor" class="...RequestPrecessor"   scope="request" />

Spring容器,即XmlWebApplicationContext 会为每个HTTP请求创建一个全新的RequestPrecessor对象,当请求结束后,该对象的生命周期即告结束,如同java web中request的生命周期。当同时有100个HTTP请求进来的时候,容器会分别针对这10个请求创建10个全新的RequestPrecessor实例,且他们相互之间互不干扰,简单来讲,request可以看做prototype的一种特例,除了场景更加具体之外,语意上差不多。

4)session

对于web应用来说,放到session中最普遍的就是用户的登录信息,对于这种放到session中的信息,我们可以使用如下形式的制定scope为session:

<bean id ="userPreferences" class="...UserPreferences"   scope="session" />

Spring容器会为每个独立的session创建属于自己的全新的UserPreferences实例,比request scope的bean会存活更长的时间,其他的方面没区别,如果java web中session的生命周期。

5)global session

<bean id ="userPreferences" class="...UserPreferences"   scope="globalsession" />

global session只有应用在基于porlet的web应用程序中才有意义,它映射到porlet的global范围的session,如果普通的servlet的web 应用中使用了这个scope,容器会把它作为普通的session的scope对待。

4.scope配置

注解方式:

xml配置方式:

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-06-07 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
[864]mysql日期时间函数
sysdate() 日期时间函数跟 now() 类似,不同之处在于:now() 在执行开始时值就得到了, sysdate() 在函数执行时动态得到值。看下面的例子就明白了:
周小董
2022/04/13
7.4K0
那些年我们的(具有含金量)MySQL测试题目
 请耐心阅读,下面有惊喜! 1.创建数据库 CREATE DATABASE QQDB; 2.创建各表(表结构;约束) /*******************创建********************/ USE QQDB; DROP TABLE IF EXISTS QQUser; CREATE TABLE QQUser ( qqid BIGINT PRIMARY KEY, PASSWORD VARCHAR(20) NOT NULL, lastlogtime DATETIME NOT NULL, onli
房上的猫
2018/03/14
1.2K0
Mysql 中的日期时间函数汇总
MySQL中内置了大量的日期和时间函数,能够灵活、方便地处理日期和时间数据,本节就简单介绍一下MySQL中内置的日期和时间函数。
跟着飞哥学编程
2023/02/10
19.2K0
Mysql 中的日期时间函数汇总
MySQL 获得当前日期时间 函数
大家好,我是架构君,一个会写代码吟诗的架构师。今天说一说MySQL 获得当前日期时间 函数,希望能够帮助大家进步!!!
Java架构师必看
2022/01/11
3.8K0
MySQL:日期函数、时间函数总结
获得当前日期+时间(date + time)函数:sysdate() sysdate() 日期时间函数跟 now() 类似,不同之处在于:now() 在执行开始时值就得到了, sysdate() 在函数执行时动态得到值。看下面的例子就明白了:
Java架构师必看
2021/12/19
3.1K0
MySQL 常用日期、时间函数介绍
MySQL 使用 DATE_FORMAT() 格式化日期,和格式化相关的函数还有 STR_TO_DATE()、TIME_FORMAT() 。
白日梦想家
2020/07/18
17.7K0
mysql计算时间
一、MySQL 获得当前日期时间 函数 1.1 获得当前日期+时间(date + time)函数:now() mysql> select now(); +---------------------+ | now() | +---------------------+ | 2008-08-08 22:20:46 | +---------------------+ 除了 now() 函数能获得当前的日期时间外,MySQL 中还有下面的函数: current_timestamp() ,current_timestamp ,localtime() ,localtime ,localtimestamp -- (v4.0.6) ,localtimestamp() -- (v4.0.6) 这些日期时间函数,都等同于 now()。鉴于 now() 函数简短易记,建议总是使用 now() 来替代上面列出的函数。 1.2 获得当前日期+时间(date + time)函数:sysdate() sysdate() 日期时间函数跟 now() 类似,不同之处在于:now() 在执行开始时值就得到了, sysdate() 在函数执行时动态得到值。看下面的例子就明白了: mysql> select now(), sleep(3), now(); +---------------------+----------+---------------------+ | now() | sleep(3) | now() | +---------------------+----------+---------------------+ | 2008-08-08 22:28:21 | 0 | 2008-08-08 22:28:21 | +---------------------+----------+---------------------+ mysql> select sysdate(), sleep(3), sysdate(); +---------------------+----------+---------------------+ | sysdate() | sleep(3) | sysdate() | +---------------------+----------+---------------------+ | 2008-08-08 22:28:41 | 0 | 2008-08-08 22:28:44 | +---------------------+----------+---------------------+ 可以看到,虽然中途 sleep 3 秒,但 now() 函数两次的时间值是相同的; sysdate() 函数两次得到的时间值相差 3 秒。MySQL Manual 中是这样描述 sysdate() 的:Return the time at which the function executes。 sysdate() 日期时间函数,一般情况下很少用到。 2. 获得当前日期(date)函数:curdate() mysql> select curdate(); +------------+ | curdate() | +------------+ | 2008-08-08 | +------------+ 其中,下面的两个日期函数等同于 curdate(): current_date() ,current_date 3. 获得当前时间(time)函数:curtime() mysql> select curtime(); +-----------+ | curtime() | +-----------+ | 22:41:30 | +-----------+ 其中,下面的两个时间函数等同于 curtime(): current_time() ,current_time 4. 获得当前 UTC 日期时间函数:utc_date(), utc_time(), utc_timestamp() mysql> select utc_timestamp(), utc_date(), utc_time(), now() +---------------------+------------+------------+---------------------+ | utc_timestamp() | utc_date() | utc_time() | now() | +---------------------+------------+------------+----------
王念博客
2019/07/24
5.4K0
MySQL操作命令大全
日期时间单位:year、month、week、day、hour、quarter、minute、second、microsecond 增加函数:date_add() 减少函数:date_sub()
程序员云帆哥
2022/05/12
7290
【黄啊码】mysql的基础函数,刚入门的你必须学会
select date_add(now(),interval 31 day); 返回'2014-10-13 11:10:17' ,这是31天后的日期。
黄啊码
2022/06/10
2890
【重学 MySQL】三十二、日期时间函数
GET_FORMAT函数中date_type和format_type参数取值如下:
用户11332765
2024/10/28
2320
【重学 MySQL】三十二、日期时间函数
MySQL时间戳与日期时间转换
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/151927.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/10
8.6K0
MYSQL语句大全
转载自 http://blog.csdn.net/a454832841/article/details/52814812
allsmallpig
2021/02/25
2.6K0
mysql日期函数
这里主要介绍一下mysql里面一些常用的日期函数,掌握了这些函数可以更好地编写sql语句。
johnhuster的分享
2022/03/28
6K0
MySQL单行函数详解
函数在计算机语言的使用中贯穿始终,函数的作用是什么呢?它可以把我们经常使用的代码封装起来,需要的时候直接调用即可。这样既提高了代码效率,又提高了可维护性。在 SQL 中我们也可以使用函数对检索出来的数据进行函数操作。使用这些函数,可以极大地提高用户对数据库的管理效率。
timerring
2023/02/16
1.4K0
MySQL单行函数详解
MySQL中日期和时间函数学习--MySql语法
下面的例子使用了时间函数。以下询问选择了最近的 30天内所有带有date_col 值的记录:
用户1289394
2021/07/09
2.1K0
MySQL 日期函数大全(更新中.....)
解析:以年-月-日这种格式输出。%r代码am还是pm。am表示凌晨和上午,pm表示下午和晚上。(0:00-12:00)。
贵哥的编程之路
2022/11/16
4.3K0
MySQL 日期函数大全(更新中.....)
小白博客 MySQL日期时间函数大全
DAYOFWEEK(date) 返回日期date是星期几(1=星期天,2=星期一,……7=星期六,ODBC标准) mysql> select DAYOFWEEK('1998-02-03'); -> 3 WEEKDAY(date) 返回日期date是星期几(0=星期一,1=星期二,……6= 星期天)。 mysql> select WEEKDAY('1997-10-04 22:23:00'); -> 5 mysql> select WEEKDAY('1997-11-05'); -> 2 DAYOFMO
奶糖味的代言
2018/04/11
1.9K0
软件开发入门教程网之MySQL 函数
📒博客主页: ​​开心档博客主页​​ 📌本文由开心档原创! ✉️这世界很喧嚣,做自己就好! 🙏作者水平很有限,如果发现错误,一定要及时告知作者哦!感谢感谢! ⭐本文介绍⭐ MySQL 有很多内置的函数,以下列出了这些函数的说明。 ​​MySQL 字符串函数​​ 函数 描述 实例 ASCII(s) 返回字符串 s 的第一个字符的 ASCII 码。 返回 CustomerName 字段第一个字母的 ASCII 码: ​​SELECT ASCII(CustomerName)
爱学iOS的小麦子
2023/01/03
4820
MySQL数据库,从入门到精通:第七篇——MySQL单行函数应用
在MySQL数据库中,函数是一种非常强大的功能,可以帮助我们对数据进行各种操作,例如进行数值计算、字符串格式化、日期时间处理等等。本文将全面介绍MySQL中的单行函数,涵盖数值函数、字符串函数、日期时间函数和加密解密函数等多个方面,帮助读者更好地理解和应用MySQL中的单行函数。
默 语
2024/11/20
1670
MySQL数据库,从入门到精通:第七篇——MySQL单行函数应用
MySQL日期和时间函数汇总
同一个日期时间会有多种不同的表示方式,有的时候需要在不同格式之间相互转换。在MySQL中用的是date_format()函数:
三分恶
2020/12/11
3.9K0
相关推荐
[864]mysql日期时间函数
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档