您的位置:首页 > 编程语言 > Java开发

Spring支持的bean作用域

2013-12-26 17:31 417 查看
singleton
容器只为bean创建一个实例。
客户端每次请求都返回一个共享实例。
客户端不能控制bean的生命周期。
由容器控制bean的产生,销毁。
prototype
每次请求bean时。都会创建一个新的实例。
客户端每次请求(调用getBean(“”)方法)都产生一个新的实例。
实例化后,完全交给客户端代码管理,容器不再追踪其生命周期。并不知道bean何时销毁。
request
用于web应用,bean在一次请求中有效。
session
用于web应用,bean在整个会话中有效。

使用经验:

0. Singleton作用域是Spring中的缺省作用域。

1. 结合Struts每次请求都产生一个新的action bean,所以结合Struts的使用,就用prototype。

2. 典型情况下,DAO不会被配置成prototype,因为一个典型的DAO不会持有任何会话状态,因此应该使用singleton作用域。

3. 如果你用"singleton"属性那么就必须在那个文件里引用'spring-beans.dtd' DTD。 如果你用"scope"属性那么必须 在那个文件里引用'spring-beans-2.0.dtd' DTD 或'spring-beans-2.0.xsd' XSD。

4. request、session以及global session仅仅在使用基于web的Spring ApplicationContext实现(如XmlWebApplicationContext)时有用,如果在普通的Spring IoC容器中,比如像XmlBeanFactory或ClassPathXmlApplicationContext,尝试使用这些作用域,你将会得到一个IllegalStateException异常(未知的bean作用域)。

5. 对所有有状态的bean应该使用prototype作用域,而对无状态的bean则应该使用singleton作用域。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: