Spring-bean作用域

本文详细介绍了SpringFramework中的五种作用域概念及其在Web应用中的使用方式,包括单例、原型、请求、会话和全局会话作用域。同时,文章探讨了如何在不同作用域中定义bean以及依赖注入的实现,特别是如何在HTTPrequest或Session作用域中创建bean实例,并通过代理对象实现在其他bean中的引用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、Spring Framework支持五种作用域

 

1、singleton : 一个bean定义对应一个对象实例 (spring容器缺省作用域)

2、prototype : 一个bean定义对应多个对象实例 (对所有有状态的bean应该使用prototype作用域,而对无状态的bean则应该使用singleton作用域,Dao不会被配置成prototype,应该是无状态的singleton

 

3、request: 在一次http请求中,一个bean定义对应一个实例,即每次http请求将会有各自得bean实例,它们依据某个bean定义创建而成。该作用域仅在基于web的spring applicationcontext情形下有效。

4、session : 在一个http session中,一个bean定义对应一个实例。该作用域仅在基于web的spring applicationcontext 情形下有效

5、global session :在一个全局的http session中,一个bean定义对应一个实例 

 

二、web使用的作用域

1、Request作用域 :在当前http request内有效,当请求结束后,request作用域的bean实例将销毁

2、Session作用域  :在当前http Session内有效

3、global session作用域 : 仅仅在基于portlet的web应用中才有意义

 

三、作用域bean与依赖

1、能够在HTTP request或者Session(甚至自定义)作用域中定义bean固然很好,但是Spring IoC容器除了管理对象(bean)的实例化,同时还负责协作者(或者叫依赖)的实例化。如果你打算将一个Http request范围的bean注入到另一个bean中,那么需要注入一个AOP代理来替代被注入的作用域bean。也就是说,你需要注入一个代理对象,该对象具有与被代理对象一样的公共接口,而容器则可以足够智能的从相关作用域中(比如一个HTTP request)获取到真实的目标对象,并把方法调用委派给实际的对象

 

2、xml配置文件中,要创建一个作用域bean的代理

     

<beans xmlns="http://www.springframework.org/schema/beans"

  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

  xmlns:aop="http://www.springframework.org/schema/aop"

  xsi:schemaLocation="

  http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd

 

  http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">

 

<aop:scoped-proxy/>

 

 

3、参考文档

http://www.xuehuile.com/blog/14f393edfeb24c259caaf5cf762ceb1d.html

      http://blog.arganzheng.me/posts/spring-bean-scopes.html

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值