Spring是個JavaBean容器,相信大部分人在學習Spring時,首先接觸的就是如何在XML文件中配置JavaBean。
想要深入了解Spring配置文件的定義,搞清楚如何定義一個Bean,需要研究一下spring-beans.xsd。
1.XML相關知識准備
- XML的約束模式有兩種:DTD/Schema。
- DTD的作用是定義XML的合法構建模塊,它使用一系列的合法元素來定義文檔結構。
- Schema是對XML文檔結構的定義和描述,其主要的作用是用來約束XML文件,並驗證XML文件有效性。
- Spring1.0采用dtd定義XML,Spring2.0以后改用Schema定義XML。(如果遇到仍然采用dtd定義的xml文件大概是個老古董了)
2.spring-beans.xsd中對bean的解釋。
文件地址:http://www.springframework.org/schema/beans/spring-beans.xsd 本地路徑:spring-beans-4.3.5.RELEASE.jar!\org\springframework\beans\factory\xml\spring-beans-4.3.xsd
以下內容摘自spring-beans.xsd
Spring XML Beans Schema, version 4.3
Authors:Juergen Hoeller, Rob Harrop, Mark Fisher, Chris Beams(四位都是spring核心人員)
定義一種簡單一致的創建JavaBeans對象命名空間的方式。(<beans></beans>)
通過XmlBeanDefinitionReader(和DefaultBeanDefinitionDocumentReader)讀取,由Spring BeanFactory管理。
這種文檔類型被基於bean工廠的大部分Spring功能使用,包括web應用上下文。
這個文檔中的每一個"bean"定義一個JavaBean。
通常這些bean實例由JavaBean的屬性和(或)構造器參數明確定義。
一個bean實例可以是"單例模式"的共享實例或者是"原型模式"的獨享實例。更多的范圍(scopes)由擴展的bean工廠提供,例如在web環境中。
支持beans之間的引用,意味着設置JavaBean的屬性或者構造參數時,可以引用同一個工廠(或祖先級工廠)的其他bean。
內部bean定義可以作為一種可選的bean引用,這種內部beans沒有獨立的生命周期,通常匿名嵌套對象共享其容器bean的作用范圍。
支持lists,sets,maps,java.util.Properites作為bean屬性或者構造參數的數據類型。
以下列舉一些主要的標簽
<beans>是根節點,它的一些屬性例如:
- profile
在嵌套的<beans>中指定不同的環境的配置參數,
可以在上下文context-param中設置profile.default,profile.active切換不同環境的配置,或使用@Profile,@ActiveProfiles指定配置
- default-lazy-init
此參數表示延時加載,即在項目啟動時不會實例化注解的bean,除非啟動項目時需要用到,未實例化的注解對象在程序實際訪問調用時才注入調用
- default-merge
在繼承關系時在子類中合並父類的值
- default-autowire
是否自動注入,如果未設置需要顯示的聲明ref引入
- default-autowire-candidates
自動注入bean的候選者
- default-init-method,初始化方法
- default-destroy-method,銷毀方法
<bean>子節點的一些屬性例如:
- id,屬性是bean唯一的身份標識。在同一個<beans>下最多只能出現一次
- name
- class
- .....
3.思考總結
由於剛學習Spring,以上舉例列出的<beans>的標簽和使用,都是在網絡中找的解釋,認識不夠深刻。看來只參照XSD是不夠的,想要深入理解還是要參考官方文檔。
作為深入學習Spring的第一節課,也為深入學習Spring提供了思路:面向《官方文檔》學習。