spring所建立的bean的做用域

    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應用中才有意義。

    上述所說的,做用域也至關因而 一個實例的生命週期。

相關文章
相關標籤/搜索