之前在开发过程中遇到了一个问题,当request发起下一个请求的时候,action中的属性值并没有清除,而是继续采用上次使用过的参数值进行查询并响应,导致数据查询不真实或失败。对此,有同事告诉我说,需要在spring配置文件的bean中添加属性scope=prototype。结果还真的有用。
下面是我对spring的bean中scope属性的一些查询与总结:
默认情况下,从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只需维护一个实例,显然性能高一些。
本文摘自:http://aaagu1234.blog.163.com/blog/static/40093715201091933942422/
分享到:
相关推荐
在Spring框架中,`scope`是一个非常重要的概念,它决定了Bean的生命周期和实例化策略。在Spring中,Bean的scope主要有以下几种: 1. **singleton(单例)**:这是默认的scope,每个容器中只有一个实例。无论多少次...
### Spring框架中的属性值注入详解 #### 一、Spring框架简介 Spring框架是一个开源的Java平台,用于构建企业级应用程序。它提供了全面的基础架构支持,包括依赖注入(Dependency Injection, DI)、面向切面编程...
在Spring框架中,`id`、`name`和`scope`是配置bean时常见的三个属性,它们对于理解和管理Bean的生命周期至关重要。今天我们将深入探讨这三个属性的含义、使用方法以及它们之间的顺序规则。 首先,`id`是Spring Bean...
在Java开发领域,Spring框架以其强大的功能和灵活的配置闻名,而注解(Annotation)是Spring框架中的一个重要组成部分,极大地简化了代码的编写和维护。本文将深入探讨Spring框架中的一些常用注解,并通过实例来解析...
scope属性 名称: scope类型:属性 归属: bean标签 作用:定义bean的作用范围 格式: <bean scope=“singleton"> 取值: singleton:设定创建出的对象保存在spring容器中,是一个单例的对象(bean默认是单例) 单例...
在Spring框架中,Bean是核心概念,它代表了应用程序中的对象,这些对象由Spring容器管理其生命周期和依赖关系。特殊Bean用法主要涉及Spring提供的多种高级特性,包括但不限于工厂方法、 prototype scope、AOP代理、...
如果在XML配置中指定了`class`属性,Spring将根据该属性创建Bean。 - **属性注入**:Spring会将依赖注入到Bean中,包括值注入(value,ref)和集合注入(list,map,props,set)。 - **初始化回调**:Spring支持...
Spring Boot 中使用 LDAP 统一管理用户信息的示例 本篇文章主要介绍了 Spring Boot 中使用 LDAP 来统一管理用户信息的示例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。下面我们将详细介绍 LDAP 的基础...
对象的`scope`属性定义了其在容器中的生命周期和可见范围,常见的有: 1. `singleton`:默认值,表示容器中只有一个共享的实例。 2. `prototype`:每次请求都会创建一个新的实例。 3. `request`:在HTTP请求范围内,...
scope属性用于定义Spring bean的作用域,它决定了Spring容器创建对象的时机以及从容器中检索bean的方式。scope属性有两个主要值: - singleton:默认值,该bean在Spring容器被创建时完成初始化,每次获取的是同一个...
例如,在配置文件中添加了一个bean标签,并指定了id和class属性,Spring容器就会根据这个配置信息来创建对象实例。 IOC容器还提供了依赖注入的功能,可以将对象之间的关系维护到容器中,例如,ScheduleController...
《Spring框架中的Context模块与XSD配置详解》 在Java企业级开发中,Spring框架扮演着至关重要的角色,尤其在Spring的Context模块中,通过XML Schema(XSD)进行配置,使得应用程序的组件管理和依赖注入变得简洁高效...
Spring的内部bean是指在另一个bean的属性中定义的bean,它仅在包含它的外部bean的上下文中存在。 22、什么是spring装配。 Spring装配是指将对象组装到一起,并设置它们之间的依赖关系的过程。 23、自动装配有哪些...
例如,可以将数据库连接信息写入属性文件,如`database.properties`,然后在Spring配置文件中使用`PropertyPlaceholderConfigurer`引入属性文件。这样,我们就可以在XML配置中使用`${...}`的方式来引用属性值,如`${...
- **`scope`属性**:用于指定Bean的生命周期范围,如`singleton`(单例模式)、`prototype`(原型模式)等。 - **`init-method`与`destroy-method`属性**:分别用于指定Bean的初始化方法和销毁方法。 #### 四、...
2. **属性注入**:实例化后,Spring会根据Bean定义中的`property`或`ref`属性为Bean注入依赖。这包括了通过setter方法设置值,以及通过构造函数传递参数。 3. **初始化**:在属性注入完成后,Spring会执行Bean实现...
- Bean的生命周期中,scope属性定义了Bean的实例化策略。例如,singleton(单例)表示在整个应用中只有一个实例,prototype(原型)表示每次请求都会创建一个新的实例。 9. **AOP(面向切面编程)** - 虽然不是...
在实际开发中,除了以上的基本注解,还可以使用`@Autowired`进行依赖注入,`@Scope`定义Bean的作用域,`@Value`注入属性值,以及`@Qualifier`来指定特定的Bean等。这些注解共同构建了Spring的注解驱动开发模型,使得...
在Spring框架中,创建对象是核心功能之一,它提供了多种方式来管理Bean的生命周期和依赖注入。本项目"spring-demo03-spring创建对象的5种方式.zip"着重探讨了Spring如何实例化对象,让我们详细了解一下这五种方法。 ...
Spring ActionScript 是一个开源框架,它将 Spring 框架的核心概念和功能带入了 Adobe Flex 和 ActionScript 开发环境中。这个入门例子旨在帮助初学者理解如何在 Flex 或 ActionScript 项目中应用 Spring ...