| 作用域 | 说明 |
|---|---|
| singleton | 默认 Spring Bean 作用域,一个 BeanFactory 有且仅有一个实例 |
| prototype | 原型作用域,每次依赖查找和依赖注入生成新 Bean 对象 |
| request | 将 Spring Bean 存储在 ServletRequest 上下文中 |
| session | 将 Spring Bean 存储在 HttpSession 中 |
| application | 将 Spring Bean 存储在 ServletContext 中 |
注意事项:
@Scope 注解定义原型 Bean :
@Bean
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
public static User prototypeUser() {
return createUser();
}
<bean class= "..." scope = "request" />@RequestScope 或 @Scope(WebApplicationContext.SCOPE_REQUEST)每次使用的 CGLIB 代理对象是同一个,但是被代理的对象每次都会重新生成。
使用 IDEA 进行远程调试:
实现 API
@RequestScopeRequestScope配置
<bean class= "..." scope = "session" />@RequestScope 或 @Scope(WebApplicationContext.SCOPE_REQUEST)实现 API
@SessionScopeSessionScope配置
<bean class= "..." scope = "application" />@ApplicationScope 或 @Scope(WebApplicationContext.SCOPE_APPLICATION)实现 API
@ApplicationScopeServletContextScope实现方式与 request 和 session 不同,这里直接将 Bean 放入 ServletContext 中
实现 Scope
org.springframework.beans.factory.config.Scope注册 Scope
org.springframework.beans.factory.config.ConfigurableBeanFactory#registerScope
配置
<bean class="org.springframework.beans.factory.config.CustomScopeConfigurer">
<property name="scopes">
<map>
<entry key="...">
</entry>
</map>
</property>
</bean>
1、spring内建的bean作用域有几种?
2、singleton bean 是否在一个应用中唯一的?
3、application bean是否被其他方案代替?