Spring XML配置Bean標簽詳解


創建對象的協作關系稱為裝配,也就是DI(依賴注入)的本質。而在Spring容器中對bean的創建時就需要對它所依賴的對象進行注入裝配。

beans: 整個配置文件的根節點,包含一個或多個Bean元素。在該標記中可配置命名空間與schema的裝載路徑,還可以通過default-init-method屬性為該配置文件中的所有Bean實例統一指定初始化方法,通過default-destroy-method屬性為該配置文件中的所有Bean實例統一指定銷毀方法,通過default-lazy-init屬性為該配置文件中的所有Bean實例統一指定是否進行遲延加載

 

bean標記: 

用該標記定義一個Bean的實例化信息,用以指導Bean工廠正確地進行Bean的生產與裝配。由class屬性指定類全名,由id(推薦使用)或name屬性指定生成的Bean實例名稱。init-method屬性指定初始化時要調用的方法,destroy-method屬性實例銷毀時要調用的方法。Bean實例的依賴關系可通過property子標記(set方式注入)或constructor-arg子標記(構造方式注入)來定義。bean標記中的scope屬性用以設定Bean實例的生成方式,當scope設置為singleton或默認時以單例模式生成,當scope設置為prototype時則以原型(多例)模式生成。

property: 它是bean標記的子標記,用以調用Bean實例中的相關Set方法完成屬性值的賦值,從而完成依賴關系的注入

name: 知道bean實例的屬性名稱

ref屬性或value屬性直接指定,也可以通過ref或value子標記指定

ref標記:該標記通常作為constructor-arg、property、list、set、entry等標記的子標記,由bean屬性指定一個Bean工廠中某個Bean實例的引用

value標記:該標記通常作為constructor-arg、property、list、set、entry等標記的子標記,用以直接指定一個常量值

list標記:該標記用以封裝List或數組類型屬性的依賴注入(即賦值),具體的元素通過ref或value子標記指定

set標記:該標記用以封裝Set類型屬性的依賴注入(即賦值),具體的元素通過ref或value子標記指定 

map標記:標記用以封裝Map類型屬性的依賴注入(即賦值),具體的元素通過entry子標記指定

entry標記:該標記通常用做map標記的子標記,用以設置一個“鍵/值”對。key屬性接收字符串類型的“鍵”名稱,“值”則可由ref或value子標記指定

props標記:該標記用以封裝Properties類型屬性的依賴注入(即賦值),具體的元素通過prop子標記指定

prop標記:該標記通常用做props標記的子標記,用以設置一個“鍵/值”對。key屬性接收字符串類型的“鍵”名稱,“值”則可放置在prop標記體內

null標記:該標記用於賦一個null值,與在Java中直接為某個屬性賦null值效果等同

 

--------------基於Annotation方式的Bean裝配:


在Spring中盡管使用XML配置文件可以完成所有的配置工作,直觀表達Java EE程序員的"裝配意圖",但如果應用中Bean數量成千上萬的話,最終會導致XML配置文件體積劇增,面對臃腫的XML配置文件,給維護與升級帶來一定的困難。

偉大的Spring開發團隊想到了JDK 1.5提供的新特性--Annotation注釋技術:

了解了Annotation注釋的工作原理之后,方覺得真正偉大的不是Annotation注釋本身,而是幕后默默無聞地進行注釋處理的Annotation處理器

Annotation處理器是基於JDK的反射機制來實現的,Spring 2.5中定義的一系列Annotation注釋

Spring 2.5中常用的Annotation注釋說明:

@Autowired:通過@Autowired注解對Bean的屬性變量、屬性的Setter方法及構造函數進行標注,配合對應的注解處理器AutowiredAnnotationBeanProcessor完成Bean的自動配置工作。

@Autowired注解默認是按Bean類型進行裝配的,也就是說注解處理器AutowiredAnnotationBeanProcessor會在Spring容器中尋找與@Autowired注解所在屬性同類型的Bean實例進行裝配,如果找到多個滿足條件的Bean實例時,將會拋出NoSuchBeanDefinitionException異常。

@Autowired注解加上@Qualifier注解的話,可以直接指定一個Bean實例名稱來進行裝配。

@Resource:@Resource的作用相當於@Autowired,配合對應的注解處理器CommonAnnotationBeanPostProcessor完成Bean的自動配置工作。只不過@Autowired注解默認是按Bean類型進行裝配的,而@Resource注解默認是按Bean實例名稱進行裝配罷了

@Resource有兩個屬性是比較重要的,分別是name和type。Spring將@Resource注解的name屬性解析為Bean實例的名字,而type屬性則解析為Bean實例的類型

@Qualifier:如果@Autowired注解加上@Qualifier注解的話,可以將默認按Bean類型進行裝配變換為按Bean實例名稱進行裝配,具體的Bean實例名稱由@Qualifier注解的參數指定

@PostConstruct:在Bean中的某個方法上加上@PostConstruct注解,則該方法將會在Bean初始化之后被Spring容器調用,作用等同在Spring配置文件中為bean標簽指定init-method屬性

@PreDestroy:在Bean中的某個方法上加上@PreDestroy注解,則該方法將會在Bean實例被銷毀之前由Spring容器進行調用,作用等同在Spring配置文件中為bean標簽指定destroy-method屬性

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM