spring 模式上的做用域有两种前端
singleton :一个 Spring容器 中只存在公用一个实例。java
prototype : 在spring容器中,每次都产生一个新的实例。web
值得注意的是,我上面所提到的 “spring容器” 这个单位,每一个配置文件都至关因而一个spring容器,在不一样的spring容器中即便是 singleton 也是会产生多个实例,可是一个容器中始终都是只有一个实例(实例的是singleton 做用域的状况下)。spring
控制做用的方法有两种服务器
<!-- 第一种方法在配置文件上 使用 scope="prototype" 声明这个类是 prototype做用域 --> <!--默认状况是 singleton 做用域 --> <bean id="user" class="controller.UserController" scope="prototype"> <property name="userService" ref="userService"></property> </bean>
package controller; import org.springframework.context.annotation.Scope; import service.UserSerivce; /** * 第二种方法 使用 @Scope 注解,使用 prototype 参数声明这个类的做用域的范围是 prototype * 默认状况下是 singleton 的 */ @Scope("prototype") public class UserController { public UserSerivce userService; public void setUserService(UserSerivce userService) { this.userService = userService; } }
如何选择Bean的做用域session
若是一个bean不会保持任何回话状态(也就是说,他是无状态的),那么应该将他的做用于定义为singleton 。例如咱们的controller,service,dao本质上都是无状态的。若是这个有会话状态的话,应该设置成 prototype 做用域,例如咱们在使用 struts2 框架式的 action类,使用对象接受前端传递的值,保留有会话信息,应该将其设置成 prototype 做用域。app
上面是将的 spring 中所提出的,做用域,在咱们的 web 服务器中同样有做用域,而咱们的 spring 框架同样能够管理。框架
request : 一次请求做用域this
session:一次会话做用域prototype
application :一个服务器做用域
global session: global session做用域相似于标准的HTTP Session做用域,不过它仅仅在基于portlet的web应用中才有意义。
上述所说的,做用域也至关因而 一个实例的生命周期。