`
youaretheboy
  • 浏览: 18639 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

spring scope="prototype" 和scope="singleton"区分

阅读更多
<bean id="meetAction" class="com.web.actions.MeetsAction"
  scope="prototype">
  <property name="meetsService" ref="meetsService" />
</bean>

<!--
scope="prototype"没写的问题,项目中对一个表的增删该操作是用一个action,这个action有add,update,delete,save这些方法,
添加和修改是共用一个页面,当页面得到id时代表进行的修改操作,反之是添加操作。因为在配置spring的bean是忘了写scope="prototype"
所以每次添加时都显示最后一次访问过的记录,scope="prototype" 会在该类型的对象被请求
时创建一个新的action对象。如果没有配置scope=prototype则添加的时候不会新建一个action,他任然会保留上次访问的过记录的信息
webwork的Action不是线程安全的,要求在多线程环境下必须是一个线程对应一个独立的实例,不能使用singleton。所以,我们在Spring配置Webwork Action Bean时,需要加上属性scope=”prototype”或singleton=”false”。
singleton模式指的是对某个对象的完全共享,包括代码空间和数据空间,说白了,如果一个类是singleton的,假如这个类有成员变量,那么这个成员变量的值是各个线程共享的(有点类似于static的样子了),当线程A往给变量赋了一个值以后,线程B就能读出这个值。因此,对于前台Action,肯定不能使用singleton的模式,必须是一个线程请求对应一个独立的实例。推而广之,只要是带数据成员变量的类,为了防止多个线程混用数据,就不能使用singleton。对于我们用到的Service、Dao,之所以用了singleton,就是因为他们没有用到数据成员变量,如果谁的Service需要数据成员变量,请设置singleton=false。

分享到:
评论
4 楼 steafler 2012-07-26  
刚刚犯了这个错误,还好现在修正了
3 楼 liangjian103 2011-11-29  
刚刚犯了这个错误,导致我在Service层里设置的全局成员变量相当于用了static修饰一样,被共享了。这个写的不错,解决了问题。
2 楼 卖火柴的老特工 2011-08-10  
同类错误犯过,嗯记住
1 楼 zxl10059 2011-07-07  
写的非常不错哈,必须得顶

相关推荐

    Spring之scope讲解测试示例代码

    在Spring框架中,`scope`是一个非常重要的概念,它决定了Bean的生命周期和实例化策略。在Spring中,Bean的scope主要有以下几种: 1. **singleton(单例)**:这是默认的scope,每个容器中只有一个实例。无论多少次...

    通俗易懂spring之singleton和prototype.docx

    总的来说,掌握Spring中的singleton和prototype两种作用域,能够帮助开发者更好地设计和实现面向服务的架构,提高代码的可重用性和可维护性。理解它们的差异,并根据具体需求选择合适的作用域,是每个Spring开发者...

    Spring实战之Bean的作用域singleton和prototype用法分析

    总结起来,Spring中的`singleton`和`prototype`作用域是管理Bean生命周期的重要手段。`singleton`提供了单例模式的实现,确保了全局唯一性,适合状态不随时间改变的对象;`prototype`则支持按需创建新实例,适用于...

    Spring IOC Bean标签属性介绍(教学视频+源代码)

    Spring IOC Bean标签属性介绍 0.Bean标签属性介绍 1.0 新建一个Maven工程 1.1 pom.xml 1.2 实体类JavaBean 1.2.1 User类 1.3 当Scope="singleton"时 1.4 当 Scope="singleton" 且 lazy-init="true" 时 1.5 当scope=...

    singleton Bean 创建 prototype Bean

    在Spring框架中,Bean的两种主要作用域是Singleton和Prototype。Singleton Bean表示在整个Spring IoC容器中只有一个实例,而Prototype Bean则表示每次请求都会创建一个新的实例。这两种作用域的使用场景和实现方式都...

    详解Spring中bean的scope以后使用

    &lt;bean id="role" class="spring.chapter2.maryGame.Role" singleton="true"/&gt; ``` 需要注意的是,虽然`Singleton`作用域下的Bean在整个容器中是唯一的,但这并不意味着它是线程安全的。开发者需要确保Bean内部的...

    Spring中的singleton和prototype的实现

    Spring中的singleton和prototype的实现 Spring框架中,bean的作用域是指在容器中bean的实例化和生命周期管理。其中,singleton和prototype是两个最基本的bean作用域。本文将详细介绍Spring中的singleton和...

    HelloSpring.zip

    我的博客中“maven环境搭建及Spring入门”的...* 单例 scope=“singleton” * 原型 scope=“prototype” 5。bean的生命周期: 默认情况下IOC容器创建的时候就会自动创建所有对象,只支持懒加载。default-lazy-init=true

    浅谈spring中scope作用域

    &lt;bean id="role" class="spring.chapter2.maryGame.Role" singleton="true"/&gt; ``` prototype 作用域 ----------------- prototype 作用域的 bean,每一次请求(将其注入到另一个 bean 中,或者以程序的方式调用容器...

    spring的bean作用域

    - 配置Prototype Bean的例子是:`&lt;bean id="role" class="spring.chapter2.maryGame.Role" scope="prototype"/&gt;` 或 `&lt;bean id="role" class="spring.chapter2.maryGame.Role" singleton="false"/&gt;` 3. **Request...

    day38 08-Spring的id、name和scope顺序

    在Spring框架中,`id`、`name`和`scope`是配置bean时常见的三个属性,它们对于理解和管理Bean的生命周期至关重要。今天我们将深入探讨这三个属性的含义、使用方法以及它们之间的顺序规则。 首先,`id`是Spring Bean...

    Spring注解@Scope原理及用法解析

    @Scope 注解有五种类型:singleton(单例)、prototype(多例)、request(请求)、session(会话)和 globalsession(全局会话)。 @Scope 注解怎么使用? -------------------- @Scope 注解可以直接在 Bean 对象...

    07-IoC配置-scope属性

    prototype:,设定创建出的对象保存在spring容器中,是一个非单例的对象 非单例的对象是在调用getBean()方法时才创建对象,在同一个bean获取的资源时,用getBean()方法得到的对象都不相同 request、session、...

    如何在Spring中自定义scope的方法示例

    然而,根据应用场景的不同,有时我们需要更灵活的管理方式,这时Spring提供了多种预定义的scope,如`prototype`、`request`、`session`、`application`和`websocket`等。 `prototype`作用域的Bean每次从容器中请求...

    SSH笔记-bean的作用域

    当设置`scope="singleton"`时,Spring容器会保证在整个应用中只有一个Bean实例。每次请求该Bean时,都会返回同一个实例。这种方式适用于无状态的Bean,例如服务层的业务对象。 2. **原型(Prototype)**:与单例...

    详解Spring中bean的作用域

    或者:&lt;bean id="role" class="spring.chapter2.maryGame.Role" singleton="true"/&gt; Singleton 作用域和 GOF 设计模式中的单例是完全不同的,单例设计模式表示一个 ClassLoader 中只有一个 class 存在,而这里的 ...

    尚学堂_Spring_0600_IOC_Bean_Scope

    例如,singleton Scope可以优化内存使用,而prototype Scope则提供了更大的灵活性。此外,Spring还提供了自定义Scope的机制,开发者可以根据需求定义自己的Bean作用域。 为了深入学习这个主题,可以参考提供的博文...

    基于java的企业级应用开发:Bean的作用域.ppt

    在【描述】中,提到了Bean的两种主要作用域:singleton和prototype,它们在不同的场景下有着重要的应用。 **Singleton作用域** Singleton是Spring容器的默认作用域,意味着无论何时,只要Spring容器需要该Bean,它...

    spring中bean的范围(xml/annotation)

    对于Singleton和Prototype之外的Web范围,我们可以使用`&lt;bean&gt;`标签的`scope`属性结合`&lt;aop:scoped-proxy/&gt;`来实现。例如,创建一个Request范围的Bean: ```xml &lt;bean id="requestScopedBean" class=...

    spring代理详解.txt

    &lt;bean id="defaultPointcutAdvisor" class="org.springframework.aop.support.DefaultPointcutAdvisor" scope="prototype"&gt; &lt;property name="pointcut" ref="fooPointcut"/&gt; &lt;property name="advice" ref=...

Global site tag (gtag.js) - Google Analytics