1.spring框架是一個分層架構,它包含一系列的功能要素,並被分為大約20個模塊。
這些模塊被總結為以下幾個部分。
(1)Core Container
Core Container(核心容器)包含有Core、Beans、Context和Expression Language模塊。
Core和Beans模塊是框架的基礎部分,提供IOC(控制反轉)和依賴注入特性。這里的基礎概念是BeanFactory,它提供了Factory模式的經典實現來消除對程序性單例模式的需要,並真正的允許你從程序邏輯中分離出依賴關系和配置。
Core模塊主要包含spring框架基本的核心工具類,spring的其他組件都要使用到這個包里的類,core模塊是其他組件的基本核心。當然你也可以在自己的應用系統中使用這些工具類
Beans模塊是所有應用都要用到的,它包含訪問配置文件、創建和管理bean以及進行Inversion of Control/ Dependency Injection操作相關的所有類。
Context模塊構建於Core和Beans模塊基礎之上,提供了一種類似於JNDI注冊器的框架式的對象訪問方法。Context模塊繼承了Beans的特性,為了spring核心提供了大量擴展,添加了對國際化、時間傳播、資源加載個對Context的透明創建的支持。ApplicationContext接口是Context模塊的關鍵。
Expression Language模塊提供了一個強大的表達式語言用於在運行時查詢和操縱對象。該語言支持設置/獲取屬性的值,屬性的分配,方法的調用,訪問數組上下文、容器和索引器、邏輯和算術運算符以及從spring的IOC容器中根據名稱檢索對象。
(2) Data Access/Integration
Data Access/Integration層包含有JDBC、ORM、OXM、JMS和Transaction模塊。
JDBC模塊提供了一個JDBC抽象層,它可以消除冗長的JDBC編碼和解析數據庫廠商特有的錯誤代碼。這個模塊包含了spring對JDBC數據訪問進行封裝的所有類。
ORM:利用ORM封裝包,可以混合使用所有Spring提供的特性進行O/R映射。
OXM:提供了一個對Object/XMl映射實現的抽象層。
JMS:提供了一些制造和消費消息的特性。
Transaction:支持編程和生命性的事務管理,這些事務類必須實現特定的接口,並且對所有的POJO都適用。
接下來開始分析這行代碼spring做了哪些事情
BeanFactory bf = new XmlBeanFactory(new ClassPathResource("beanFactoryTest.xml"))
首先來分析它的運行時序,第一步:new ClassPathResource(“bean.....”)
在java中,將不同來源的資源抽象成URL,通過注冊不同的handler來處理不同來源的資源的讀取邏輯,一般handler的類型使用不同前綴來識別,如“file:”、“http:”、“jar:”等,然而URL沒有默認定義相對ClassPath或servletContext等資源的handler。因而spring對其內部使用到的資源實現了自己的抽象結構:Resource接口來封裝底層資源。
首先,它定義了3個判斷當前資源狀態的方法:存在性(exists)、可讀性(isReadable)、是否處於打開狀態(isOpen)。另外,Resource接口還提供了不同資源到URL、URI、File類型的轉換,以及獲取lastModified屬性、文件名,resouce還提供了基於當前資源創建一個相對資源的方法:CreateRelative()。在錯誤處理中需要詳細的打印出錯的資源文件,因而Resource還提供了getDescription()方法用於在錯誤處理中打印信息。