内容来自《Java Web 程序员面试笔试宝典》

【出现频率】★★★☆☆ 【学习难度】★★☆☆☆

答案:Spring支持5种作用域。singleton与prototype是基本作用域,适用于所有Bean,singleton是Spring默认的作用域;Request、Session和globalSession是Web作用域,只有在Web应用中使用Spring时,这三个作用域才有效。现分别介绍如下。

1)singleton:单例模式,在 Spring IoC 容器中,使用 singleton 作用域的 Bean 将只有一个实例。

2)prototype:原型模式,每次注入,Spring IoC容器都将创建一个新的 Bean 实例。

3)request:对于每次HTTP请求,使用request作用域的Bean都会创建一个新实例,即每次HTTP请求将会产生不同的Bean实例。

4)session:对于每次 HTTP Session,使用session作用域的 Bean 都会创建一个新实例。

5)globalSession:同一个全局的HTTPSession,只会创建一个新实例。典型情况下,仅在使用portlet context时有效。

比较常用的是singleton和prototype两种作用域。Spring默认使用singleton作用域,容器会管理Bean的整个生命周期。而使用 prototype 作用域时,容器创建实例交给调用组件后,将不再维护该实例。使用 singleton 作为作用域的好处是可以节省频繁创建与销毁实例的开销。但要注意,在单例模式下,Bean 是线程不安全的。