spring的controllerspringmvc默认是单例例还是多例

阅读(1901)
在我们的项目中,通过Spring来管理业务逻辑Bean,但是Spring Bean的作用域默认是单例,而我们的业务逻辑Bean不是线程安全的,所以需要将Spring Bean改为多例模式。
为单个Bean设置单例或者多例,可以通过设置singleton属性,见以下代码:
&bean id="page" class="com.daks.action.LoginAction" singleton="false"/&
但是我们没有一个一个Bean进行配置,而是通过context:component-scan自动扫描@Component注释来装载Bean。所以我们需要1) 直接修改Spring整个Bean容器的Bean默认作用域,或者2) 修改某一个扫描的包下的所有Bean的作用域。这里第一种思路没有找到答案,据说早期的Spring版本允许设置全局Bean默认作用域,后来的版本已经不再允许。下面为第二种思路找到了方案,重要在于context:component-scan标签中的scope-resolver属性以及实现ScopeMetadataResolver接口。
&?xml version="1.0" encoding="UTF-8"?&
&beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.1.xsd"&
&context:component-scan base-package="com.daks.*" scope-resolver="com.daks.action.MyScopeResolver"/&
package com.daks.
import org.springframework.beans.factory.config.BeanD
import org.springframework.context.annotation.ScopeM
import org.springframework.context.annotation.ScopeMetadataR
import org.springframework.context.annotation.ScopedProxyM
* @author Alan
public class MyScopeResolver implements ScopeMetadataResolver {
public ScopeMetadata resolveScopeMetadata(BeanDefinition definition) {
ScopeMetadata result = new ScopeMetadata();
result.setScopedProxyMode(ScopedProxyMode.NO);
result.setScopeName("prototype");
背景:组件扫描
阅读排行榜Spring MVC Controller单例陷阱
标签:Spring mvc
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://lavasoft./9
Spring MVC Controller默认是单例的:
单例的原因有二:
1、为了性能。
2、不需要多例。
1、这个不用废话了,单例不用每次都new,当然快了。
2、不需要实例会让很多人迷惑,因为spring mvc官方也没明确说不可以多例。
我这里说不需要的原因是看开发者怎么用了,如果你给controller中定义很多的属性,那么单例肯定会出现竞争访问了。
因此,只要controller中不定义属性,那么单例完全是安全的。下面给个例子说明下:
package com.lavasoft.demo.web.controller.lsh.ch5;
import org.springframework.context.annotation.S
import org.springframework.stereotype.C
import org.springframework.ui.ModelM
import org.springframework.web.bind.annotation.RequestM
* Created by Administrator on 14-4-9.
* @author leizhimin 14-4-9 上午10:55
@Controller
@RequestMapping(&/demo/lsh/ch5&)
@Scope(&prototype&)
public class MultViewController {
private static int st = 0;
private int index = 0;
@RequestMapping(&/show&)
public String toShow(ModelMap model) {
User user = new User();
user.setUserName(&testuname&);
user.setAge(&23&);
model.put(&user&, user);
return &/lsh/ch5/show&;
@RequestMapping(&/test&)
public String test() {
System.out.println(st++ + & | & + index++);
return &/lsh/ch5/test&;
改为单例的:
从此可见,单例是不安全的,会导致属性重复使用。
最佳实践:
1、不要在controller中定义成员变量。
2、万一必须要定义一个非静态成员变量时候,则通过注解@Scope(&prototype&),将其设置为多例模式。
相关 [spring mvc controller] 推荐:
- 企业架构 - ITeye博客
Spring MVC Controller单例陷阱. 标签:Spring mvc. 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明. Spring MVC Controller默认是单例的:. 1、这个不用废话了,单例不用每次都new,当然快了. 2、不需要实例会让很多人迷惑,因为spring mvc官方也没明确说不可以多例.
- 企业架构 - ITeye博客
在Spring MVC中,定义了多种URL与Controller映射关系的描述方式. 在基于注解的Spring MVC中,采用Java注解的方式描述URL与Controller之间的关系,那么Spring MVC是如何获取这些映射关系,并将其注册到handlerMap中呢.
//取得容器中的搜有bean
- CSDN博客架构设计推荐文章
Web层面的框架学习了三个Struts1和2,SpringMVC,那他们之间肯定存在一个优劣和适用的环境,Struts1和2的异同点我已经做过对比《
Struts1和Struts2》,这篇将对比下Struts2和SpringMVC的异同,下面数据基本来源于网络,本人是搜集整理所得,供大家参考. 一个项目使用什么样的技术,决定的因素很多,我所能想到的有:对系统的性能、开发的效率、团队学习的成本、业务场景等,下面尽量从这几个方面入手,来分析比较下他们之间存在的优劣.
- 编程语言 - ITeye博客
链接:/blog/1297746 (附源码). 链接:/blog/983801 . 链接:/xguo/p/3163519.html . 链接:/blog/947191 .
- CSDN博客推荐文章
springmvc 框架围绕DispatcherServlet这个核心展开,DispatcherServlet是Spring MVC的总控制,它负责截获请求并将其分派给相应的处理器处理. SpringMVC框架包括注解驱动控制器、请求及响应的信息处理、视图解析、本地化解析、上传文件解析、异常处理以及表单标签绑定等内容.
- 码蜂笔记
项目组用了 Spring MVC 进行开发,觉得对里面的使用方式不是很满意,就想,如果是我来搭建开发环境,我会怎么做. 下面就是我的想法,只关注于 MVC 的 View 层. 现在基本上都是用 ajax 来调用后台接口,拿到 json格式的数据再展示,有的人直接返回数据,却没有考虑异常的情况,我觉得返回的报文里必须包含表示可能的异常信息的数据和业务响应数据.
- Java译站
10年前我开始自己的职业生涯的时候,Struts还是市场上的主流标准. 然而多年过后,我发现Spring MVC已经越来越流行了. 对我而言这并不意外,因为它能和Spring容器无缝集成,同时它还提供了灵活性及扩展性. 从我迄今为止对Spring的经验来看,我发现有不少人在配置Spring的时候经常会犯一些常见的错误.
- 企业架构 - ITeye博客
大家好,Spring3 MVC是非常优秀的MVC框架,由其是在3.0版本发布后,现在有越来越多的团队选择了Spring3 MVC了. Spring3 MVC结构简单,应了那句话简单就是美,而且他强大不失灵活,性能也很优秀. 官方的下载网址是:
http://www.springsource.org/download
(本文使用是的Spring 3.0.5版本).
- 企业架构 - ITeye博客
一般情况下,对来自浏览器的请求的拦截,是利用Filter实现的,这种方式可以实现Bean预处理、后处理. Spring MVC的拦截器不仅可实现Filter的所有功能,还可以更精确的控制拦截精度. Spring为我们提供了org.springframework.web.servlet.handler.HandlerInterceptorAdapter这个适配器,继承此类,可以非常方便的实现自己的拦截器.
- 企业架构 - ITeye博客
如何在Spring MVC里面解决此问题(其它框架也一样,逻辑一样,思想一样,和具体框架没什么关系). 要解决重复提交,有很多办法,比如说在提交完成后redirect一下,也可以用本文提到的使用token的方法(我不使用redirect是因为那样解决不了ajax提交数据或者移动应用提交数据,另一个原因是现在比较通行的方法是使用token,像python里的django框架也是使用token来解决).
坚持分享优质有趣的原创文章,并保留作者信息和版权声明,任何问题请联系:@。博客分类:
&?xml version="1.0" encoding="UTF-8"?&
&!-- Bean头部 --&
&beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd"&
&bean id="s1" class="com.hisky.test.Student" init-method="init" scope="singleton"&
&constructor-arg index="0" value="10"&&/constructor-arg&
&bean id="s2" class="com.hisky.test.Student" init-method="init" scope="singleton"&
&constructor-arg index="0" value="10"&&/constructor-arg&
在Spring的配置文件中设置bean的scope为单例类型,启动没有问题,而且也能取到两个对象。
@ContextConfiguration("classpath:/spring/test.xml")
public class Test extends AbstractTestNGSpringContextTests {
@Autowired
@Qualifier("s1")
Student s1;
@Autowired
@Qualifier("s2")
Student s2;
@org.testng.annotations.Test
public void testname() throws Exception {
System.out.println(s1);
System.out.println(s2);
输出显示,获取到的是两个不同的对象。所以Spring的单例,意味着对象被调用的时候,不再重新创建。但在JVM中,可以存在同一类的多个bean示例。
浏览: 21959 次
来自: 北京> 博客详情
spring3中的controller默认是单例的,若是某个controller中有一个私有的变量a,所有请求到同一个controller时,使用的a变量是共用的,即若是某个请求中修改了这个变量a,则,在别的请求中能够读到这个修改的内容。
若是在@controller之前增加@Scope("prototype"),就可以改变单例模式为多例模式
人打赏支持
支付宝支付
微信扫码支付
打赏金额: ¥
已支付成功
打赏金额: ¥开始把hibernateTemplate在Spring配置文件中配置成单例,但是发现呢访问数据库表时有的表要使用缓存,有的不需要,所以经常在方法里要写
hibernateTemplate.setCacheQueries(true);
我抽象了一个连接管理类, ConnectionManager, 主题类TopicManager,可能还有更多.
1.就拿这个TopicManager来说, 我的程序主要就是用发布订阅的模式实现通讯, 也就是TopicManager的访问读取会非常频繁. 因为
现在在开发一个app的后端,操作数据库的类都做成单例了,在某处看到这样一句话:
“一些servlet容器对每个servlet使用完全不同的类装载器,这样的话如果有两个servlet访问一个单例类,它们就都会有各自的实例。”
请问这个“一些servlet”容
今天在修改数据库,发现每个类都有自己的单例实现函数,然后很多冗余的逻辑,于是就想父类写一个单例函数,然后子类继承就可以生成各自的单例了.
结果发现俺错了...
+ (id)sharedInstance{
static BaseDAO *
class Singleton
private static $
private function __construct()
现在有一个业务逻辑是页面点击【执行】完成所有操作之后。下一个人才能再执行。第一个人执行过程中,第二个人点击执行需要等第一个人执行完毕之后,才能执行。struts2的action是多例的,在方法上加synchronized是不是无法实现这个功能?有没有比较好的办
当多个请求调用单例service时为什么数据不会出现互相干扰?比如进行查询传进一个id,当一请求来时栈指向堆中唯一的service进行查询,没查询完另一个请求也进来查询,两者都指向那个service,数据不会出错么?
数据库连接问题。new一个数据库的连接对象是耗时耗资源的,因此不可能对每个请求都做一遍连接创建和关闭的操作,网上给的方法一般采用连接池。我的疑问就是,我如果采用单例模式,
这样的话,如果是多个线程请求数据库操作,那么直接调用静态getInstance方法(
我在面试测试工程师时,经常问到的一个问题是“给出Word另存为这个功能的测试用例”。除开基本的测试用例外,考虑到各种异常情况,例如内存已满、硬盘空间不足是非常重要的。但是针对移动互联网App来说,情况还要复杂的多。
一个重要原则是:测试你最终要发布
需求就是自己写了一个微信公众平台开发的小玩意,使用SSM框架,由于请求时基本都需要access_token,所以我让所有的controller都继承了一个BaseController:
public class BaseController {
小弟接触spring时间不长,之前从事C开发,对效率问题比较重视。
spring里面的bean管理是单例实现,在服务器同时接受多个请求是,是如何处理的?
如果多个请求中有相同的bean使用,这个看似与bean单例管理相矛盾,spring存在怎样的机制来
本期请来了阿里中间件技术专家魏鹏 (豫楚)直播分享基于Java容器的多应用部署技术实践
随着业务的发展,机器的数量和系统复杂性不断提升,较之简单系统的开发部署,大规模分布式系统将会面对以下新问题:
1. 性能问题,系统之间通过远程调用来进
项目中用了backbone,JS文件越来越多(如下例所示引用在html文件里),请教一下各位,
1. JS文件多了会对性能产生什么影响,
2. 多个JSfile和一个大的包罗万象的file有什么区别
3. 有没有什么通用的方法把所有的js文件
例:发送者A 选择内容A、内容B,发送给接收者A跟接收者B,
另:不光可以发多个内容,还可以发整个目录,目录包括内容,接收者还可以针对内容进行评论反馈
求如何设计数据库表,记录发送内容
mysql采用默认事务隔离级别REPEATABLE-READ;
然后我分别执行以下内容:
![1](/yqfiles/cab10cf58af27154e83fcc3daea7fd3fae219d71.jpeg
最近项目中遇到个问题比较难搞。不知道各位有什么好的办法没有?
比如:有三个产品A、B、C。
产品A要求7点钟发送邮件,
产品B要求10点发送邮件
产品C要求11点发送邮件
产品可以自己修改邮件发送时间。同样是一个邮件发送的过程,
本期请来了阿里云资深DBA专家罗龙九(玄惭)直播分享了云数据库十大经典案例总结和反思
《云数据库十大经典案例》以MySQL数据库为例,收集整理了自RDS成立至今,用户在使用RDS过程中最常见的问题,包括:索引,sql优化,锁,延迟,参数优化,
想知道大家在做非关系型数据库的项目时是如何进行设计的,以学生选课为例,每个学生可以选择多个课程,每个课程可以让多个学生选择,这种多对多关系要如何设计,如果我要删除一个课程,如何保证数据库的一致性?
tomcat是如何管理不同项目独立运行的呢?每个项目都是子进程?不可能时线程吧,否则不同项目间就会发生冲突了吧(对于很多单例类什么的)。

我要回帖

更多关于 spring 默认单例 的文章

 

随机推荐