Sprign 框架(三)(Spring Bean的詳解)

Spring  Bean 的定義

bean 是一個被實例化,組裝,並通過 Spring IoC 容器所管理的對象。

Bean與Spring容器的關係, spring容器--(讀取)--Bean配置信息--(根據bean註冊表實例化bean)--bean實現類---(將bean實例放到spring容器中)---應用程序使用bean。

Spring配置元素一般有三種:基於XML的配置、基於註解的配置、基於java的配置。

屬性名稱 描述
id 是一個 Bean 的唯一標識符,Spring 容器對 Bean 的配置和管理都通過該屬性完成
name Spring 容器同樣可以通過此屬性對容器中的 Bean 進行配置和管理,name 屬性中可以爲 Bean 指定多個名稱,每個名稱之間用逗號或分號隔開
class 該屬性指定了 Bean 的具體實現類,它必須是一個完整的類名,使用類的全限定名
scope  用於設定 Bean 實例的作用域,其屬性值有 singleton(單例)、prototype(原型)、request、session 和 global Session。其默認值是 singleton
constructor-arg <bean>元素的子元素,可以使用此元素傳入構造參數進行實例化。該元素的 index 屬性指定構造參數的序號(從 0 開始),type 屬性指定構造參數的類型
property <bean>元素的子元素,用於調用 Bean 實例中的 Set 方法完成屬性賦值,從而完成依賴注入。該元素的 name 屬性指定 Bean 實例中的相應屬性名
ref <property> 和 <constructor-arg> 等元素的子元索,該元素中的 bean 屬性用於指定對 Bean 工廠中某個 Bean 實例的引用
value <property> 和 <constractor-arg> 等元素的子元素,用於直接指定一個常量值
list 用於封裝 List 或數組類型的依賴注入
set 用於封裝 Set 類型屬性的依賴注入
map 用於封裝 Map 類型屬性的依賴注入
entry

<map> 元素的子元素,用於設置一個鍵值對。其 key 屬性指定字符串類型的鍵值,ref 或 value 子元素指定其值

 

Bean的屬性:

 

singleton:在spring IoC容器僅存在一個Bean實例,Bean以單例方式存在,默認值。Singleton是單例類型,就是在創建起容器時就同時自動創建了一個bean的對象,不管你是否使用,他都存在了,每次獲取到的對象都是同一個對象。注意,Singleton作用域是Spring中的缺省作用域

  <bean id="helloWorld" class="com.tutorialspoint.HelloWorld" scope="singleton">

prototype:每次從容器中調用Bean時,都返回一個新的實例,即每次調用getBean()時,相當於執行newXxxBean()。Prototype是原型類型,它在我們創建容器的時候並沒有實例化,而是當我們獲取bean的時候纔會去創建一個對象,而且我們每次獲取到的對象都不是同一個對象

<bean id="helloWorld" class="com.tutorialspoint.HelloWorld" scope="prototype">

request:每次HTTP請求都會創建一個新的Bean,該作用域僅適用於WebApplicationContext環境。

session:同一個HTTP Session共享一個Bean,不同Session使用不同的Bean,僅適用於WebApplicationContext環境。

global-session:一般用於Portlet應用環境,該運用域僅適用於WebApplicationContext環境

 

Bean的生命週期

Bean的定義——Bean的初始化——Bean的使用——Bean的銷燬。

爲了定義安裝和拆卸一個 bean,我們只要聲明帶有 init-method 和/或 destroy-method 參數的 。init-method 屬性指定一個方法,在實例化 bean 時,立即調用該方法。同樣,destroy-method 指定一個方法,只有從容器中移除 bean 之後,才能調用該方法。

如果你有太多具有相同名稱的初始化或者銷燬方法的 Bean,那麼你不需要在每一個 bean 上聲明初始化方法銷燬方法。框架使用 元素中的 default-init-method 和 default-destroy-method 屬性提供了靈活地配置這種情況。

 

 

spring bean後置處理

Bean 後置處理器允許在調用初始化方法前後對 Bean 進行額外的處理。

BeanPostProcessor 接口定義回調方法,你可以實現該方法來提供自己的實例化邏輯,依賴解析邏輯等。

public class InitHelloWorld implements BeanPostProcessor {
   public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
      System.out.println("BeforeInitialization : " + beanName);
      return bean;  // you can return any other object as well
   }
   public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
      System.out.println("AfterInitialization : " + beanName);
      return bean;  // you can return any other object as well
   }
}
<bean class="com.tutorialspoint.InitHelloWorld" />

 

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