Spring是一個開源框架,框架的主要優勢之一就是其分層架構,分層架構允許選擇使用其中一個組件,同時為J2EE應用程序開發提供集成的框架。Spring由7個定義良好的模塊組成,Spring模塊構建在核心容器之上,核心容器定義了創建、配置和管理bean的方式
核心容器 提供spring框架的基本功能。核心容器的主要組件時BeanFactory,工廠模式的實現,其使用控制反轉IOC模式將應用程序的配置和依賴性規范與 實際的應用程序代碼分開
Spring上下文 spring上下文是一個配置文件,向spring框架提供上下文信息。spring上下文包括企業服務,例如JNDI EJB 電子郵件 國際化 校驗和調度等
Spring AOP 通過配置管理特性,spring AOP模塊直接將面向方面的編程功能集成到框架中。該模塊為基於spring應用程序中的對象提供了事務管理服務
Spring DAO jdbc dao抽象層提供了有意義的異常層次結構,可用該結構來管理處理和不同數據庫供應商拋出的錯誤消息。異常層次結構簡化了錯誤處理, 降低了需要編寫的異常代碼數量
Spring ORM 框架插入了若干各ORM框架,提供了ORM的對象關系工具,包括JDO HIBERNATE IBATIS
Spring Web web上下文模塊建立在應用程序上下文模塊之上,為基於web應用程序提供上下文,該模塊還簡化了處理
多部分請求一級將請求參數綁定到域對象的工作
Spring MVC 該框架是一個全功能的構建web應用程序的MVC實現,通過策略接口,MVC框架成為高度可配置的,MVC容納大量視圖技術,包括JSP VELOCITY TILES ITEXT POI
IOC和AOP
控制反轉模式的基本概念:不創建對象,但是描述創建它們的方式。在代碼中不直接與對象和服務連接,但在配置文件中描述哪一個組件需要哪一項服務,容器負責將這些聯系在一起。 在典型IOC場景中,容器創建了所有對象,並設置必要的屬性將它們連接在一起,決定什么時間調用方法
類型 1 | 服務需要實現專門的接口,通過接口,由對象提供這些服務,可以從對象查詢依賴性(例如,需要的附加服務) |
---|---|
類型 2 | 通過 JavaBean 的屬性(例如 setter 方法)分配依賴性 |
類型 3 | 依賴性以構造函數的形式提供,不以 JavaBean 屬性的形式公開 |
面向方面編程
AOP,允許程序員對橫切關注點或橫切典型的職責分界線的行為(例如日志和事務管理)進行模塊化。可將影響多個類的行為封裝到可重用的模塊中。AOP是IOC的補充,它們運用模塊化方式解決復雜問題
IOC容器
Spring設計的核心是org.springframework.beans包,與JavaBean組件一起使用。這個包通常不是由用戶直接使用,而是由服務器將其用作多數功能的底層中介。下一個最高抽象是BeanFactory接口,它是工廠模式的實現,允許通過名稱創建和檢索對象,BeanFactory也可以管理對象之間的關系
BeanFactory支持兩個對象模型
單態 提供具有特定名稱的對象的共享實例,可以在查詢時對其進行檢索。Singleton是默認也是最常用的對象模型,對於無狀態服務對象很理想
原型 確保每次檢索都會創建單獨的對象。在每個用戶都需要自己的對象時,原型模型最適合
bean工廠的概念時Spring作為IOC容器的基礎,IOC將處理事情的責任從應用程序代碼轉移到框架
BeanFactory接口
BeanFactory是一個接口,可以針對各種底層存儲方法實現,最常用的BeanFactory定義是XmlBeanFactory,根據xml文件中定義裝入bean
BeanFactory factory = new XMLBeanFactory(new FileInputStream('xxx.xml'));
在xml文件中定義的bean是被消極加載的,在需要bean之前,bean本身不會被初始化。要從BeanFactory檢索bean,只需調用getBean()方法,傳 入要檢索的bean 名稱即可 MyBean mybean = (MyBean) factory.getBean("mybean"); 每個bean的定義都可以是POJO或FactoryBean