1. 程式人生 > >spring學習(一)

spring學習(一)

col gin 初始化 自動 message 方式 調度 加載 統一

spring結構圖

技術分享圖片

一、核心容器(core container):核心容器由spring-core,spring-beans,spring-context,spring-context-support和spring-expression(SpEL,Spring表達式語言,Spring Expression Language)等模塊組成,它們的細節如下:

1.spring-core模塊提供了框架的基本組成部分,包括 IoC 和依賴註入功能

2.spring-beans 模塊提供 BeanFactory,工廠模式的微妙實現,它移除了編碼式單例的需要,並且可以把配置和依賴從實際編碼邏輯中解耦

3.context模塊建立在由corebeans 模塊的基礎上建立起來的,它以一種類似於JNDI註冊的方式訪問對象。Context模塊繼承自Bean模塊,並且添加了國際化(比如,使用資源束)、事件傳播、資源加載和透明地創建上下文(比如,通過Servelet容器)等功能。Context模塊也支持Java EE的功能,比如EJB、JMX和遠程調用等。ApplicationContext接口是Context模塊的焦點。spring-context-support提供了對第三方庫集成到Spring上下文的支持,比如緩存(EhCache, Guava, JCache)、郵件(JavaMail)、調度(CommonJ, Quartz)、模板引擎(FreeMarker, JasperReports, Velocity)等

4.spring-expression模塊提供了強大的表達式語言,用於在運行時查詢和操作對象圖。它是JSP2.1規範中定義的統一表達式語言的擴展,支持set和get屬性值、屬性賦值、方法調用、訪問數組集合及索引的內容、邏輯算術運算、命名變量、通過名字從Spring IoC容器檢索對象,還支持列表的投影、選擇以及聚合等

個模塊間依賴關系如下:

技術分享圖片

二、數據訪問(data access)/集成(integration):數據訪問/集成層包括 JDBC,ORM,OXM,JMS 和事務處理模塊,它們的細節如下:(註:JDBC=Java Data Base Connectivity,ORM=Object Relational Mapping,OXM=Object XML Mapping,JMS=Java Message Service)

1.JDBC 模塊提供了JDBC抽象層,它消除了冗長的JDBC編碼和對數據庫供應商特定錯誤代碼的解析。

2.ORM 模塊提供了對流行的對象關系映射API的集成,包括JPA、JDO和Hibernate等。通過此模塊可以讓這些ORM框架和spring的其它功能整合,比如前面提及的事務管理

3.OXM 模塊提供了對OXM實現的支持,比如JAXB、Castor、XML Beans、JiBX、XStream等。

4.JMS 模塊包含生產(produce)和消費(consume)消息的功能。從Spring 4.1開始,集成了spring-messaging模塊

5.事務模塊為實現特殊接口類及所有的 POJO 支持編程式和聲明式事務管理。(註:編程式事務需要自己寫beginTransaction()、commit()、rollback()等事務管理方法,聲明式事務是通過註解或配置由spring自動處理,編程式事務粒度更細)

三、web:Web 層由 Web,Web-MVC,Web-Socket 和 Web-Portlet 組成,它們的細節如下:

1.Web 模塊提供面向web的基本功能和面向web的應用上下文,比如多部分(multipart)文件上傳功能、使用Servlet監聽器初始化IoC容器等。它還包括HTTP客戶端以及Spring遠程調用中與web相關的部分

2.Web-MVC 模塊為web應用提供了模型視圖控制(MVC)和REST Web服務的實現。Spring的MVC框架可以使領域模型代碼和web表單完全地分離,且可以與Spring框架的其它所有功能進行集成

3.Web-Socket 模塊為 WebSocket-based 提供了支持,而且在 web 應用程序中提供了客戶端和服務器端之間通信的兩種方式

4.Web-Portlet 模塊提供了用於Portlet環境的MVC實現,並反映了spring-webmvc模塊的功能

四、其他: AOP,Aspects,Instrumentation,Web 和測試模塊

1.AOP 模塊提供了面向方面的編程實現,允許你定義方法攔截器和切入點對代碼進行幹凈地解耦,從而使實現功能的代碼徹底的解耦出來。使用源碼級的元數據,可以用類似於.Net屬性的方式合並行為信息到代碼中

2.Aspects 模塊提供了與 AspectJ 的集成,這是一個功能強大且成熟的面向切面編程(AOP)框架

3.Instrumentation 模塊在一定的應用服務器中提供了類 instrumentation 的支持和類加載器的實現

4.Messaging 模塊為 STOMP 提供了支持作為在應用程序中 WebSocket 子協議的使用。它也支持一個註解編程模型,它是為了選路和處理來自 WebSocket 客戶端的 STOMP 信息

5.測試模塊支持對具有 JUnit 或 TestNG 框架的 Spring 組件的測試

spring學習(一)