Spring 框架中bean管理細節

Spring 框架中bean管理細節

一、創建bean的三種方式

1.使用默認構造函數(無參構造器)創建

在Spring的配置文件中,使用bean標籤,配置idclass屬性之後,且沒有其他屬性和標籤時。採用的就是默認構造函數創建bean對象,此時如果類中沒有默認構造函數,則對象無法創建成功。
示例:
beans.xml文件中配置bean

	<bean id="userService" class="com.itjj.service.impl.userServiceImpl"></bean>

此時需要有無參構造器(當然,沒有自定義有參構造器時,可以沒有,因爲無參構造器是默認的)

	public void UserServiceImpl(){
	}

2.使用普通工廠中的方法創建對象(使用某個類中的方法創建對象,並存入ioc容器)

在com.itjj.factory下創建工廠類

//創建對象的工廠類
public class InstanceFactory{
  //創建IUserService對象的方法
  public IUserService getUserService(){
  	//返回值類型是要創建的對象型
  	return new UserServiceImpl();
  }
}

beans.xml文件中配置bean

	<!-- 工廠的bean -->
	<bean id="instanceFactory" class="com.itjj.factory.impl.InstanceFactory"></bean>
	<!-- 使用工廠創建對象
		factory-bean:是工廠的bean
		factory-method:是工廠類中創建該對象的方法
	 -->
	<bean id="userService" factory-bean="instanceFactory" factory-method="getUserService"></bean>

3.使用工廠中的靜態方法創建對象(使用某個類中的靜態方法創建對象,並存入ioc容器)

在com.itjj.factory下創建工廠類

//創建對象的工廠類
public class StaticFactory{
  //創建IUserService對象的靜態方法
  public static IUserService getUserService(){
  	//返回值類型是要創建的對象型
  	return new UserServiceImpl();
  }
}

beans.xml文件中配置bean

	<!-- 使用靜態工廠創建對象
		class:是靜態工廠類的全限定類名
		factory-method:是工廠類中創建該對象的方法
	 -->
	<bean id="userService" class="com.itjj.factory.impl.StaticFactory" factory-method="getUserService"></bean>

二、bean對象的作用範圍

bean標籤的scope屬性:用於指定bean對象的作用範圍。
scop標籤的取值(常用singleton和prototype):
1.singleton :單例的(默認值);
2.prototype :多例的;
3.request :作用域web應用的請求範圍;
4.session :作用域web應用的會話範圍;
5.global-session:作用域集羣環境的會話範圍(全局會話範圍)。
注:session與global-session,global-session是當有多臺服務器時,對所有服務器有效,,當不是集羣環境時,它就是session。

示例:

	<bean id="userService" class="com.itjj.service.impl.userServiceImpl" scope="singleton"></bean>

三、bean對象的生命週期

1.單例對象(singleton時)

(1)創建:容器創建時,對象創建。(加載完beans配置文件,對象也就創建了)
(2)生存:只要容器還在,對象也一直存在。
(3)消亡:容器銷燬,對象消亡。
總結:單例對象,與容器共存亡。

2.多例對象(singleton時)

(1)創建:當我們使用對象時,spring框架爲我們創建。
(2)生存:對象只要是在使用過程中就一直存在。
(3)消亡:對象長時間不用,且沒有別的對象引用時,由Java回收機制(GC)回收。
總結:多例對象,與正常new出來的Java對象的生命週期一樣。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章