首页 > 技术文章 > Spring bean作用域

redcool 2017-01-07 11:37 原文

全当知识要点记录了,大家随意踩踩。

spring的作用域有以下几种
singleton作用域
prototype作用域
request作用域
session作用域
global-session作用域

1. singleton作用域 scope="singleton" 默认值
bean设置为该作用域时,Spring IOC容器中只会存在一个共享的bean实例,也就意味着Spring IOC容器只会创建该bean定义的唯一实例。
这个单一实例会被存储到单例缓存(singleton cache)中。

2. prototype作用域 scope="prototype"
prototype作用域部署的bean,每一次请求(将其注入到另一个bean中,或者以程序的方式调用容器的getBean())都会产生一个新的bean
实例,相当于一个new操作。
注意:Spring不能对一个prototype bean的整个生命周期负责,容器在初始化、配置、装饰或者是装配完一个prototype实例后,将它交给客户端,
随后就对 prototype实例不闻不问了。此时清楚任何prototype作用域的对象并释放其所持有的昂贵资源,都是客户端代码的职责。

注意:request作用域、session作用域、global-session作用域使用的时候首先要在初始化web的web.xml中做以下配置
<listener>
    <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
</listener>
3. request作用域
表示该作用域下,针对每一次HTTP请求都会产生一个新的bean,同时该bean仅在当前HTTP-request内有效

4. session作用域
session作用域表示针对每一次HTTP请求都会产生一个新的bean,同时该bean仅在当前HTTP-session内有效

5. global-session作用域
全局会话内有效

推荐阅读