Spring Singleton,请求,会话Bean和线程安全

由众多有用框架组成的Spring框架生态系统已成为许多Java EE应用程序的基础。 但是在所有Spring产品的核心中,我们仍然拥有Spring DI / IOC框架,该框架将Spring推向了新的高度。

随着越来越多的人将Spring MVC或JSF-Spring集成用于他们的应用程序,除了更传统的Singleton和Prototype范围之外,Spring Bean现在更频繁地用于请求/会话范围。

刚开始使用各种Spring范围的开发人员最初的好奇心之一是,这些范围在Web应用程序中以及在需要编写安全的并发代码的情况下的行为方式。 好吧,这个“否”的答案就是要对这些范围进行过度考虑,因为它们的行为与命名方式完全相同。 让我们以JSF-Spring集成为例,其中所有JSF bean都由Spring IOC容器加载,并且bean的作用域也使用假定的Spring的@Scope注释定义。

具有@Scope(“ request”)的bean可以在任何新的传入请求中创建,因此可以保证它的线程安全,因为它是在每次有新请求进入时创建的。接下来是@Scope(“ session”) bean,对于在用户的每个会话中,如果用户通过浏览器的多个选项卡访问应用程序,则该bean范围肯定会出现并发问题,因此对于开发人员而言,确保共享会话数据的状态不会损坏很重要。

现在是@Scope(“ singleton”)或Spring Bean的默认范围,这些单例Bean在繁重的Web应用程序中的行为如何。 首先,重要的是要了解“ Singleton”仅意味着一个实例,即应用程序将仅具有该bean的一个实例。 现在,Spring框架对于这个Singleton bean的多线程行为并没有做任何事情 ,即它只是一个普通的Singleton bean,并且由开发人员来处理与该bean有关的并发问题。

现在出现了一个问题,Web应用程序中应将哪种bean用作Singleton ,答案很简单: 任何没有STATE的Bean都可以是singleton 。 例如,可以轻松地成为单例的bean是DAOServiceController这些控制器没有自己的状态,而是我们在应用程序中利用这些bean执行某些操作。DAO层bean可以是单例,因为它们没有具有各自的状态,但是每个线程使用DAO bean进行访问以执行特定于线程的操作,因此DAO bean不受其自身并发访问的影响,因为它没有其自身的状态。

选择Singleton bean的一个非常糟糕的例子是需要维护其状态的bean,在这种情况下,每个线程都会尝试通过破坏数据将自己的状态强加到该bean上。 例如,如果将具有名称和年龄的设置器和获取器的Person bean设为单例。 现在,如果有多个线程开始访问此bean,它们将继续覆盖Person实例的最后一个设置值,从而破坏状态。

结论–请记住黄金法则: 仅选择那些没有状态的bean作为单例

参考:来自我们JCG合作伙伴 Tarun Sapra的Spring Singleton,请求,会话Bean和线程安全 ,在“ Java Enterprise Ecosystem”博客上 。

相关文章 :

  • Spring依赖注入技术的发展
  • Spring MVC开发–快速教程
  • 每个人都知道MVC…
  • Spring MVC3 Hibernate CRUD示例应用程序
  • 使用Spring Security保护GWT应用程序
  • Java教程和Android教程列表

翻译自: https://www.javacodegeeks.com/2011/11/spring-singleton-request-session-beans.html

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

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

相关文章

some fragments

1.fullpage 2.one page.js 3.scrollReveal.js 4.wow.js 5.浏览器前缀: -webkit- : Safari,Chrome -o- : Opera -moz- : Firefox -ms- : IE   6.css3过渡动画:transitio…

面试之ajax原理(转载)

总结1 总结2 AJAX全称为“Asynchronous JavaScript and XML”(异步JavaScript和XML),是一种创建交互式网页应用的网页开发技术, 是几种原有技术的结合体。它由下列技术组合而成。 1.使用CSS和XHTML来表示。 2. 使用DOM模型来交互和…

优化方案电子版_关于小区分支道路整修设计方案的讨论稿(No.2020121)

各位业主,大家好! 关于绿洲比华利花园主干道翻新和次干道整修前期勘查和设计方案,经业委会及小区专家小组、设计单位申都设计公司工程设计人员结合本小区的实际情况进行了深入讨论,优化设计,形成如下三个独立方案&…

OSGI和Spring动态模块–简单的Hello World

在此姿势中,我们将采用使用OSGi进行的第一个实现,并使用Spring Dynamic Modules改进应用程序。 Spring动态模块(Spring Dm)使基于OSGi的应用程序的开发更加容易。 这样,服务的部署就容易得多。 您可以像其他任何Spring…

C语言代码规范(五)函数参数个数

一个函数的参数的数目过多(尤其是超过8个)显然是一种不可取的编程风格。参数的数目直接影响调用函数的速度,参数越多,调用函数越慢。 参数的数目少,程序就显得精练、简洁,这有助于检查和发现程序中的错误。…

vijos P1740 聪明的质检员

题目链接:传送门 题目大意:给你n个物品,每件物品有重量 W 和价值 V,给m个区间,和一个标准值。(n,m最大200000) 要求找到一个值x,使得m个所有区间的权值和与标准值的差的绝对值最小。单个区间权值计算公式(数目num0,价值…

为什么有的开关电源需要加自举电容?

一、什么是自举电路? 1.1 自举的概念 首先,自举电路也叫升压电路,是利用自举升压二极管,自举升压电容等电子元件,使电容放电电压和电源电压叠加,从而使电压升高。有的电路升高的电压能达到数倍电源电压。…

VS2010报错 error:LINK1123:转换到COF期间失败,文件无限或损坏

右键工程-配置属性-清单工具-输入和输出,嵌入清单一项重新选择为否,如下图 修改后重新生成和运行,发现程序正常运行了。

springboot 整合mybatis_SpringBoot整合Mybatis、MybatisPuls

文末视频讲解SpringBoot的版本是2.2.0一、整合Mybatis1-1、引入pom文件<dependency> <groupId>mysqlgroupId> <artifactId>mysql-connector-javaartifactId> <version>8.0.19version> dependency> <dependency> &l…

iOS 开发中遇到的问题

1. 关于纠结很久的KVO崩溃问题&#xff0c;其真正原因是&#xff0c;在删除roomItem的KVO之前,将这个对象已经赋值为nil,所以实际上并没有删除他的observer&#xff0c;因此而崩溃&#xff1b;长时间纠结的原因是受.cxx_destruct影响了思路 2.拷贝block 因为block变量默认是声明…

为旧版代码创建存根–测试技术6

任何阅读此博客的人都可能已经意识到&#xff0c;目前我正在开发一个包含大量旧代码的项目&#xff0c;这些旧代码庞大&#xff0c;扩展且编写时从未进行过任何测试。 在使用此遗留代码时&#xff0c;有一个行为异常的类非常普遍&#xff0c;整个团队都一次又一次地犯错。 为了…

C学习杂记(一)常见误会

一、sizeof是关键字&#xff0c;不是函数。 二、strlen是函数。

python性能解决_我们如何发现并解决Python代码中性能下降的问题

Python部落(python.freelycode.com)组织翻译&#xff0c;禁止转载&#xff0c;欢迎转发。 作者&#xff1a;Omer Lachish 最近&#xff0c;我们已经开始使用RQ库代替Celery库作为我们的任务运行引擎。第一阶段&#xff0c;我们只迁移了那些不直接进行查询工作的任务。这些任务包…

easyui $.parser.parse 页面重新渲染

一些dom元素是动态拼接上的easui的样式&#xff0c;由于页面已经渲染过了&#xff0c;所以需要手动执行渲染某个部件或者整个页面 $.parser.parse(); // parse all the page $.parser.parse(#cc); // parse the specified node $.parser.parse($("#grid").parent());…

Java EE6装饰器:在注入时装饰类

软件中常见的设计模式是装饰器模式 。 我们上一堂课&#xff0c;然后在它周围包装另一堂课。 这样&#xff0c;当我们调用类时&#xff0c;我们总是在到达内部类之前经过周围的类。 Java EE 6允许我们通过CDI创建装饰器&#xff0c;作为其AOP功能的一部分。 如果我们想实现仍然…

C语言代码规范(六)浮点型变量逻辑比较

无论是float还是double类型的变量&#xff0c;都有精度限制。所以一定要避免将浮点变量用""或"!"与数字比较&#xff0c;应该设法转化成为">"或"<"形式。 不建议使用的例子&#xff1a; if(0.0 x) if(0.0 ! x) 强烈推荐的例…

图灵机器人调用数据恢复_机器人也能撩妹?python程序员自制微信机器人,替他俘获女神芳心...

机器人也有感情还记得王传君饰演的《星语心愿之再爱》这部电影吗&#xff1f;王传君饰演的天才程序员“王鹏鹏”因工作原因不能陪伴照顾身在异地的女朋友“林亦男”&#xff0c;呆萌宅男“王鹏鹏”开发出一款以自己为原型的“王鹏鹏8.0”程序去陪伴异地恋的女友&#xff0c;后来…

Spark排错与优化

一. 运维 1. Master挂掉,standby重启也失效 Master默认使用512M内存&#xff0c;当集群中运行的任务特别多时&#xff0c;就会挂掉&#xff0c;原因是master会读取每个task的event log日志去生成spark ui&#xff0c;内存不足自然会OOM&#xff0c;可以在master的运行日志中看到…

在MySQL上使用带密码的GlassFish JDBC安全性

我在该博客上最成功的文章之一是有关在GlassFish上使用基于表单的身份验证来建立JDBC安全领域的文章 。 对这篇文章的一些评论使我意识到&#xff0c;要真正使它安全&#xff0c;应该做的还很多。 开箱即用的安全性 图片&#xff1a; TheKenChan &#xff08; CC BY-NC 2.0 &a…

mgo写入安全机制

mgo写入安全机制 mongo写入安全mgo写入安全mongo写入安全 mongo本身也有一整套的写入安全机制,但是在这篇的内容里只介绍一小部分相关部分.先放一个链接可以跳过本节不看直接看这个 链接. WriteConcern.NONE:没有异常抛出WriteConcern.NORMAL:仅抛出网络错误异常&#xff0c;没…