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應用中才有意義。
上述所說的,做用域也至關因而 一個實例的生命週期。