Spring创建bean的scope选择

注:原创作品,转载请注明出处

Spring提供五种选择让用户决定bean的作用范围:
1,Singleton:单例模式,在整个Spring ioc中。使用singleton定义的bean将只有一个实例。
例如:
   <bean id="userDao" class="com.supan.dao.imp.UserDaoImp" scope="singleton">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>


测试java代码:
     public void testSpringScope()
{
UserDao ud1 = (UserDao)ctx.getBean("userDao");

UserDao ud2 = (UserDao)ctx.getBean("userDao");

System.out.println(ud1 == ud2);
}


输出:true

2,prototype 原型模式:每次通过spring容器的getBean都将产生一个新的实例
例如:
spring配置文件:
    <bean id="userDao" class="com.supan.dao.imp.UserDaoImp" scope="prototype">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>


java测试代码:
        /**
* <测试spring配置bean的属性scopt的作用>
*/
public void testSpringScope()
{
UserDao ud1 = (UserDao)ctx.getBean("userDao");

UserDao ud2 = (UserDao)ctx.getBean("userDao");

System.out.println(ud1 == ud2);
}


输出:false

3,request:对于每次http请求,使用request定义的bean都将产生一个新的实例。注:只有在web容器使用spring时,这个作用域才生效。

<bean id="LoginAction" class="com.supan.LoginAction" scope="request">

4,session:对于每次http session请求,使用session定义的bean都将产生一个新的实例。。注:只有在web应用中使用spring,此作用域才能生效。

由于本机上没有j2ee环境,没有实例展出。

5,global session:每个全局的Http session对应一个bean实例,典型情况下,仅在使用portletcontext的时候才有效。注:只有在web应用中使用spring,此作用域才能生效。

由于本机上没有j2ee环境,没有实例展出。


最后写一点:使用经验:
1, Sington是单例模式,由ioc容器管理,不是线程安全的。
若类是无状态的,那么sington性能要高一点,因为只有一个实例。
若类是有状态的,那么必须把scope设置成prototype。

2, 在ssh2项目中struts的action是有状态的,必须显示设置成scope="prototype",prototype是原型模式,每次action请求过来都会创建一个新的action。
而对于dao的实现类,推介使用scope = "sington" 因为这些类没有状态,

3,比较常用的是singleton,和prototype两种作用域。
4,spring默认的作用域是singleton(这样最省系统资源),如非必要,请不要随便用prototype作用域(比较消耗系统资源)
5,在使用request,session,global session需要在spring中额外的配置。
第一种配置方法(Servlet2.4以后):
  <listener>
<listener-class>
org.springframework.web.context.request.RequestContextListener
</listener-class>
</listener>

第一种配置方法(Servlet2.4以前):
   <filter>
<filter-name>requestContextFilter></filter-name>
<filter-class>org.springframework.web.filter.RequestContextFilter</filter-class>
</filter>

<filter-mapping>
<filter-name>requestContextFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值