作用域 scope

来源 说明
singleton 默认 Spring Bean 作用域,一个 BeanFactory 有且仅有一个实例
prototype 原型作用域,每次依赖查找和依赖注入生成新 Bean 对象
request 将 Spring Bean 存储在 ServletRequest 上下文中
session 将 Spring Bean 存储在 HttpSession 中
application 将 Spring Bean 存储在 ServletContext 中
eg:

  1. <bean id="userInfo" class="cn.java.bean.UserInfo" ></bean>
  2. <bean id="userInfo" class="cn.java.bean.UserInfo" scope="singleton"></bean>

prototype

Spring 容器没有办法管理 prototype Bean 的完整生命周期,也没有办法记录实例的存
在。销毁回调方法将不会执行,可以利用 BeanPostProcessor 进行清扫工作。

request

• 配置
• XML -
• Java 注解 - @RequestScope 或 @Scope(WebApplicationContext.SCOPE_REQUEST)
• 实现
• API - RequestScope

session

配置
• XML -
• Java 注解 - @SessionScope 或 @Scope(WebApplicationContext.SCOPE_SESSION)
• 实现
• API - SessionScope

application

配置
• XML -
• Java 注解 - @ApplicationScope 或 @Scope(WebApplicationContext.SCOPE_APPLICATION)
• 实现
• API - ServletContextScope

自定义

实现 Scope
• org.springframework.beans.factory.config.Scope
• 注册 Scope
• API - org.springframework.beans.factory.config.ConfigurableBeanFactory#registerScope
• 配置

  1. <bean class="org.springframework.beans.factory.config.CustomScopeConfigurer">
  2. <property name="scopes">
  3. <map>
  4. <entry key="...">
  5. </entry>
  6. </map>
  7. </property>
  8. </bean>