Spring支持bean的作用域有几种吗? 每种作用域是什么样的?
时间: 2023-06-10 22:04:35 浏览: 76
Spring支持5种作用域:singleton、prototype、request、session、global session。
1. singleton:默认作用域,容器中只会存在一个共享的实例。
2. prototype:每次请求都会创建一个新的实例。
3. request:每个 HTTP 请求都会创建一个新的实例,该实例仅在当前请求内有效。
4. session:每个 HTTP Session 会创建一个新的实例,该实例在整个会话期间有效。
5. global session:基于 Servlet 3.0+ 的全局 HTTP Session 会话中每个应用程序都会创建一个新的实例。
相关问题
spring 支持几种 bean 的作用域?
Spring 支持以下五种 Bean 的作用域:
1. singleton:单例模式,一个 Bean 容器中只有一个实例,所有请求都返回同一个实例。
2. prototype:原型模式,每次请求都会创建一个新的实例。
3. request:请求模式,每个 HTTP 请求都会创建一个新的实例,该实例仅在当前请求内有效。
4. session:会话模式,每个 HTTP 会话都会创建一个新的实例,该实例在整个会话期间有效。
5. global-session:全局会话模式,仅在使用基于 Servlet 的 Web 应用程序时才有意义。 在基于 Portlet 的 Web 应用程序中,它等同于“会话”作用域。 全局会话模式仅在全局 HTTP 会话中创建一个 Bean 实例。
Spring Bean 的作用域有什么?
Spring Bean 的作用域指的是在容器中创建的 Bean 对象所处的生命周期和可见范围。Spring Framework 支持以下五种 Bean 作用域:
1. singleton (默认):在整个应用程序中只创建一个 Bean 实例,每次请求都返回同一个 Bean 实例。
2. prototype:每次请求都创建一个新的 Bean 实例。
3. request:每个 HTTP 请求都会创建一个新的 Bean 实例,该 Bean 实例仅在当前 HTTP 请求内可用。
4. session:每个 HTTP Session 都会创建一个新的 Bean 实例,该 Bean 实例仅在当前 HTTP Session 内可用。
5. global-session:在基于 Portlet 的 Web 应用程序中,为每个全局 HTTP Session 创建一个 Bean 实例。在使用 Servlet 时,global-session 作用域相当于 session 作用域。
可以通过在 Bean 的定义中设置 scope 属性来指定 Bean 的作用域。例如:
```
<bean id="myBean" class="com.example.MyBean" scope="singleton">
<!-- Bean properties -->
</bean>
```
在 Java 配置中,可以使用 @Scope 注解来指定 Bean 的作用域。例如:
```
@Bean
@Scope("prototype")
public MyBean myBean() {
return new MyBean();
}
```
在应用程序中选择正确的 Bean 作用域非常重要,可以提高应用程序的性能和减少资源的浪费。通常情况下,应该尽量使用 singleton 作用域,除非有特殊的需求需要使用其他作用域。