1. 程式人生 > 實用技巧 >spring中的bean標籤詳解

spring中的bean標籤詳解

spring中的bean標籤詳解

1、作用

用於配置物件讓spring來建立的,預設情況下它呼叫的是類中的無參建構函式,如果沒有無參建構函式則不能建立成功。

2、屬性

  • id:給物件在容器中提供一個唯一標識。用於獲取物件。
  • class:指定類的全限定類名。用於反射建立物件。預設情況下呼叫無參建構函式。
  • scope:指定物件的作用範圍。
    • singleton:預設值,單例的
    • prototype:多例的
    • request:WEB專案中,Spring建立一個Bean的物件,將物件存入到request域中
    • session:WEB專案中,Spring建立一個Bean的物件,將物件存入到session域中
    • globalSession:WEB專案中,應用在Portlet環境.如果沒有Portlet環境那麼globalSession相當於session
  • init-method:指定類中的初始化方法名稱
  • destroy-method:指定類中銷燬方法名稱

3、bean的作用範圍和生命週期

  • 單例物件:scope="singleton":一個應用只有一個物件的例項。它的作用範圍就是整個引用。
    • 生命週期
      • 物件出生:當應用載入,建立容器時,物件就被建立了。
      • 物件活著:只要容器在,物件一直活著。
      • 物件死亡:當應用解除安裝,銷燬容器時,物件就被銷燬了。
  • 多例物件:scope="prototype":每次訪問物件時,都會重新建立物件例項。
    • 生命週期
      • 物件出生:當使用物件時,建立新的物件例項。
      • 物件活著:只要物件在使用中,就一直活著。
      • 物件死亡:當物件長時間不用時,被java的垃圾回收器回收了。

4、例項化bean的三種方式

4.1、方式一

<!--在預設情況下:它會根據預設無參建構函式來建立類物件。如果bean中沒有預設無參建構函式,將會建立失敗-->
<bean id="customerService" class="com.itheima.service.impl.CustomerServiceImpl"/>

4.2、方式二

/**
 * 模擬一個靜態工廠,建立業務層實現類
 */
public class StaticFactory {	
	public static ICustomerService createCustomerService(){
		return new CustomerServiceImpl();
	}
}
<!-- 此種方式是:
	 使用StaticFactory類中的靜態方法createCustomerService建立物件,並存入spring容器
	 id屬性:指定bean的id,用於從容器中獲取
	 class屬性:指定靜態工廠的全限定類名
	 factory-method屬性:指定生產物件的靜態方法
 -->
<bean id="customerService" 
	  class="com.itheima.factory.StaticFactory" 
	  factory-method="createCustomerService"></bean>

4.3、方式三

/**
 * 模擬一個例項工廠,建立業務層實現類
 * 此工廠建立物件,必須現有工廠例項物件,再呼叫方法
 */
public class InstanceFactory {	
	public ICustomerService createCustomerService(){
		return new CustomerServiceImpl();
	}
}
<!-- 此種方式是:
		 先把工廠的建立交給spring來管理。
		然後在使用工廠的bean來呼叫裡面的方法
		factory-bean屬性:用於指定例項工廠bean的id。
		factory-method屬性:用於指定例項工廠中建立物件的方法。
	-->
	<bean id="instancFactory" class="com.itheima.factory.InstanceFactory"></bean>
	<bean id="customerService" 
		  factory-bean="instancFactory" 
		  factory-method="createCustomerService"></bean>