`

spring 中属性scope 的prototype(有状态)和singleton(无状态)

阅读更多

 

Singleton:单例模式,可能会有线程安全的问题

Prototype:原型模式,不存在线程安全的问题

 

默认情况下,从bean工厂所取得的实例为Singleton(bean的singleton属性) Singleton: Spring容器只存在一个共享的bean实例,默认的配置。

Prototype: 每次对bean的请求都会创建一个新的bean实例。二者选择的原则:有状态的bean都使用Prototype作用域,而对无状态的bean则应该使用singleton作用域。

 

在 Spring2.0中除了以前的Singleton和Prototype外又加入了三个新的web作用域,分别为request、session和 global session。如果你希望容器里的某个bean拥有其中某种新的web作用域,除了在bean级上配置相应的scope属性,还必须在容器级做一个额外的初始化配置。即在web应用的web.xml中增加这么一个ContextListener:

org.springframework.web.context.request.RequestContextListener 以上是针对Servlet 2.4以后的版本。比如Request作用域!

 

singleton是单态模式的 ,有ioc容器管理 ,当然不是线程安全的啦 ,不过所谓的线程安全也是相对的,如果你的类是没有状态的(没有类的公用属性,不会同时被多个线程改变), 那用singleton 的性能要高一些 ,因为只有一个实例 。 

如果你的类是有状态的(有公用属性,可能被不同的线程改变),那就必须显示的设置为prototype了。

 

在ssh2 项目中 , struts2的action交由spring管理的时候 ,spring默认是singleton的 ,而struts2的action显然是有状态的 ,所以必须显示设置为 scope=“prototype”

prototype为原型模式 , 每次action请求过来都会创建一个action

但是对那些Dao的实现类推介scope=“singleton” ,因为这些类没有状态,用singleton只需维护一个实例,显然性能高一些

 

 

有状态会话bean   :每个用户有自己特有的一个实例,在用户的生存期内,bean保持了用户的信息,即“有状态”;一旦用户灭亡(调用结束或实例结束),bean的生命期也告结束。即每个用户最初都会得到一个初始的bean。 

无状态会话bean   :bean一旦实例化就被加进会话池中,各个用户都可以共用。即使用户已经消亡,bean   的生命期也不一定结束,它可能依然存在于会话池中,供其他用户调用。由于没有特定的用户,那么也就不能保持某一用户的状态,所以叫无状态bean。但无状态会话bean   并非没有状态,如果它有自己的属性(变量),那么这些变量就会受到所有调用它的用户的影响,这是在实际应用中必须注意的

 

 

分享到:
评论

相关推荐

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

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

    通俗易懂spring之singleton和prototype.docx

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

    Spring中的singleton和prototype的实现

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

    singleton Bean 创建 prototype Bean

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

    Spring之scope讲解测试示例代码

    在Eclipse中,`.classpath`和`.project`文件是项目配置文件,它们定义了项目的构建路径和属性。`WebContent`目录通常包含Web应用的静态资源,如HTML、CSS和JavaScript文件。`.settings`目录存储了项目的特定于IDE的...

    详解Spring中bean的scope以后使用

    本文详细介绍了Spring框架中Bean的几种作用域及其配置方法,包括Singleton、Prototype、Request、Session和Global Session等。每种作用域都有其适用场景,开发者应根据具体的应用需求选择合适的作用域。合理地利用...

    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 对象...

    浅谈spring中scope作用域

    spring 中的 scope 作用域是指在spring 框架中,bean 的实例化和生命周期的管理。Scope 作用域决定了 bean 的实例化方式、生命周期和作用域。 singleton 作用域 ----------------- 在 spring 中,默认的作用域是 ...

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

    在Spring框架中,`scope`是一个非常重要的概念,它决定了Spring管理的Bean的生命周期和实例化策略。默认情况下,Spring中的Bean默认为`singleton`作用域,意味着在整个应用程序中只有一个实例。然而,根据应用场景的...

    对Spring中注解怎么实现的一些基本原理

    此外,`@Scope`注解用于设置Bean的作用域,如单例(singleton)或原型(prototype)。 6. **AOP代理**:Spring的面向切面编程(AOP)可以通过注解实现,如`@Aspect`定义一个切面,`@Before`、`@After`、`@Around`等...

    spring bean的生命周期

    - **Singleton Beans的懒加载**:如果Bean的scope为singleton,并且在XML配置中没有设置`lazy-init="true"`,那么Spring容器在启动时就会实例化这些Bean。 - **Prototype Beans的每次请求创建**:scope为prototype...

    尚学堂_Spring_0600_IOC_Bean_Scope

    在Spring中,Bean可以有多种Scope,包括: 1. **singleton**:默认的Scope,每个容器中只有一个Bean实例。当多个地方需要同一个Bean时,Spring会返回同一个实例,实现全局唯一。 2. **prototype**:每个请求都会...

    07-IoC配置-scope属性

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

    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=...

    Spring中常用注解

    5. `@Scope`: 此注解用于定义bean的作用域,如`singleton`(单例)和`prototype`(原型)。`singleton`表示容器只创建一个bean实例,而`prototype`则表示每次请求都会创建一个新的bean实例。 6. `@PostConstruct` ...

    Spring.pdf

    scope属性用于定义Spring bean的作用域,它决定了Spring容器创建对象的时机以及从容器中检索bean的方式。scope属性有两个主要值: - singleton:默认值,该bean在Spring容器被创建时完成初始化,每次获取的是同一个...

    Spring系列面试题129道(附答案解析)

    - singleton:默认作用域,在Spring IoC容器中只有一个实例。 - prototype:每次请求都会创建一个新的Bean实例。 - request:每次HTTP请求都会创建一个新的Bean实例。 - session:每个HTTP Session都会有一个Bean...

    详解Spring中bean的作用域

    在 Spring 中,bean 的作用域可以分为五种:singleton、prototype、request、session 和 global session。这五种作用域类型决定了 bean 的实例化和生命周期的管理方式。 1. Singleton 作用域 Singleton 作用域是...

    spring中所需要的知识点及学习方向文档

    对象的`scope`属性定义了其在容器中的生命周期和可见范围,常见的有: 1. `singleton`:默认值,表示容器中只有一个共享的实例。 2. `prototype`:每次请求都会创建一个新的实例。 3. `request`:在HTTP请求范围内,...

Global site tag (gtag.js) - Google Analytics