bean有如下作用域:
- singleton
- prototype
- request
- session
- application
- websocket
singleton(单例)
单例是spring默认的作用域,不用显示指定,对于每一个bean,spring容器只创建一个实例,当有多个类依赖于这个bean时,其实注入的都是同一个实例。
prototype(多例)
每个请求方都会得到自己对应的一个对象实例
设置成多例作用域需要显示指定
<bean id="accountService" class="com.something.DefaultAccountService" scope="prototype"/>
Request, Session, Application, WebSocket Scopes
这四种作用域只有在web项目下才能使用,在使用这四种作用域前,还需要进行一些web的初始化配置,在web.xml下加入如下配置信息
<web-app>
...
<listener>
<listener-class>
org.springframework.web.context.request.RequestContextListener
</listener-class>
</listener>
<filter>
<filter-name>requestContextFilter</filter-name>
<filter-class>org.springframework.web.filter.RequestContextFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>requestContextFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
...
</web-app>
request 作用域
<bean id="requestProcessor" class="......" scope="request"/>
对每个http请求都会创建一组bean实例,各组实例之间互不干扰。
session作用域
<bean id="sessionProcessor" class="......" scope="session"/>
与request类似,对每个独立的session创建一组bean实例