Spring的作用域

1.Singleton作用域:
当一个bean的作用域为singleton, 那么Spring IoC容器中只会存在一个共享的bean实例,并且所有对bean的请求,只要id与该bean定义相匹配,则只会返回bean的同一实例。

Singleton作用域是Spring中的缺省作用域。要在XML中将bean定义成singleton,可以这样配置:

Xml代码 复制代码
  1. <bean id="accountService" class="com.foo.DefaultAccountService"/>  
  2.   
  3. <!-- the following is equivalent, though redundant (singleton scope is the default) -->  
  4. <bean id="accountService" class="com.foo.DefaultAccountService" scope="singleton"/>  
  5.   
  6. <!-- the following is equivalent, though redundant (and preserved for backward compatibility) -->  
  7. <bean id="accountService" class="com.foo.DefaultAccountService" singleton="true"/>  
<bean id="accountService" class="com.foo.DefaultAccountService"/>

<!-- the following is equivalent, though redundant (singleton scope is the default) -->
<bean id="accountService" class="com.foo.DefaultAccountService" scope="singleton"/>

<!-- the following is equivalent, though redundant (and preserved for backward compatibility) -->
<bean id="accountService" class="com.foo.DefaultAccountService" singleton="true"/>


2.Prototype作用域
Prototype作用域的bean会导致在每次对该bean请求(将其注入到另一个bean中,或者以程序的方式调用容器的getBean()方法)时都会创建一个新的bean实例。根据经验,对所有有状态的bean应该使用prototype作用域,而对无状态的bean则应该使用singleton作用域

要在XML中将bean定义成prototype,可以这样配置:

Xml代码 复制代码
  1. <bean id="accountService" class="com.foo.DefaultAccountService" scope="prototype"/>  
  2.   
  3. <!-- the following is equivalent too (and preserved for backward compatibility) -->  
  4. <bean id="accountService" class="com.foo.DefaultAccountService" singleton="false"/>  
<bean id="accountService" class="com.foo.DefaultAccountService" scope="prototype"/>

<!-- the following is equivalent too (and preserved for backward compatibility) -->
<bean id="accountService" class="com.foo.DefaultAccountService" singleton="false"/>


对于prototype作用域的bean,有一点非常重要,那就是Spring不能对一个prototype bean的整个生命周期负责:容器在初始化、配置、装饰或者是装配完一个prototype实例后,将它交给客户端,随后就对该prototype实例不闻不问了
3.其他作用域
其他作用域,即request、session以及global session仅在基于web的应用中使用(不必关心你所采用的是什么web应用框架)。
a.Request作用域:
在一次HTTP请求中,一个bean定义对应一个实例;即每次HTTP请求将会有各自的bean实例,它们依据某个bean定义创建而成。该作用域仅在基于web的Spring ApplicationContext情形下有效。

Xml代码 复制代码
  1. <bean id="userPreferences" class="com.foo.UserPreferences" scope="session"/>  
<bean id="userPreferences" class="com.foo.UserPreferences" scope="session"/>


b. Request作用域
在一个HTTP Session中,一个bean定义对应一个实例。该作用域仅在基于web的Spring ApplicationContext情形下有效。

Xml代码 复制代码
  1. <bean id="userPreferences" class="com.foo.UserPreferences" scope="session"/>  
<bean id="userPreferences" class="com.foo.UserPreferences" scope="session"/>


c.global session作用域
在一个全局的HTTP Session中,一个bean定义对应一个实例。典型情况下,仅在使用portlet context的时候有效。该作用域仅在基于web的Spring ApplicationContext情形下有效。

Xml代码 复制代码
  1. <bean id="userPreferences" class="com.foo.UserPreferences" scope="globalSession"/>  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值