一、Spring是什么
Spring是分層的Java SE/EE 應用 full-stack 輕量級開源框架,以IoC(Inverse Of Controller:控制反轉) 和AOP(Aspect Oriented Programming:面向切面編程)為內核,
提供了展現層Spring MVC和持久層Spring JDBC以及業務層事務管理等眾多的企業級應用技術,還能整合開源世界眾多著名的第三方框架和類庫,逐漸成為使用最多的
Java EE企業應用開源框架。
二、Spring的來源
最早由Rod Johnson創建,並在《Expert One-on-One:J2EE Design and Development》這本著作中進行了介紹。Spring是為了解決企業級應用開發的復雜性而創建
的,使用Spring可以讓簡單的JavaBean實現只有EJB才能完成的事情。但Spring不僅僅局限於服務器開發,任何Java引用都能在簡單性、可測試性和耦合性等方面從Spring
中獲益。
三、Spring的優勢
1、方便解耦,簡化開發
通過Spring提供的IoC容器,可以將對象間的依賴關系交由Spring進行控制,避免硬編碼所造成的過度程序耦合。用戶也不必再為單列模式類、屬性文件解析等這些很底層
的需求編寫代碼,可以更專注於上層的應用。
2、AOP編程的支持
通過Spring的AOP功能,方便進行面向切面的編程,許多不容易用OOP實現的功能可以通過AOP輕松應付
3、聲明式事務的支持
可以從單調煩悶的事務管理代碼中解脫出來,通過聲明式方式靈活的進行事務的管理,提高開發效率和質量。
4、方便程序的測試
可以用非容器依賴的編程方式進行幾乎所有的測試工作,測試不再是昂貴的操作,而是隨手可做的事情。
5、方便集成各種優秀框架
Spring可以將降低各種框架的使用難度,提供了對各種優秀框架(Struts、 Hibernate、 Hessian、 Quart等)的直接支持。
6、降低JavaEE API的使用難度
Spring對JavaEE API(如 JDBC、JavaMail、遠程調用等)進行了薄薄的封轉層,使這些API的使用難度大為降低。
7、Java源碼是經典學習范例
Spring的源代碼設計精妙、結構清晰、匠心獨用,處處體現着大師對Java設計模式靈活運用以及對Java技術的高深造詣。它的源代碼
是Java技術的最佳實踐的范例。
四、Spring的體系結構
Spring 5的體系結構,可分為7個模塊集合:
(1) 核心容器(Core Container)
(2) AOP (面向切面編程)
(3) Instrumentation(設備支持)
(4) Messaing(報文發送)
(5) Date Access/Integeration(數據訪問及集成)
(6) 數據訪問及集成(Data Access/Integeration)
(7) Test
1、核心模塊
由 spring-beans、sping-cores、spring-context和spring-expression(spring expression language,SpEL,spring表達語言) 4 個模塊組成。
- spring-beans模塊:提供了BeanFactory,是工廠模式的一個經典實現,Spring將管理對象成為Bean
- spring-cores模塊:提供了框架的基本組成部分,包括控制反轉(IoC)和依賴注入(DI)
- spring-context模塊:建立在Core和Beans模塊的基礎之上,提供了一個框架式的對象訪問方式,是訪問定義和配置的任何對象的媒介。ApplicationContext接口是Context的焦點
- spring-context-support模塊:支持整合第三方庫到Spring應用程序上下文,特別是用於高速緩存(EhCache、JCache)和任務調度(CommonJ、Quartz)的支持
- spring-expression模塊:提供了強大的表達式語言去支持運行時查詢和操作對象圖。這是對JSP2.1規范中規定的統一表達式語言(Unified EL)的擴展。該語言支持設置和獲取屬性值、該語言支持設置和獲取屬性值、屬性分配、方法調用、訪問數組、集合和索引器的內容、邏輯和算術運算、變量命名以及Spring的Ioc容器總以名稱檢索對象。它還支持列表投影、選擇以及常用的列表聚合。
2、AOP和Instrumentation
- spring-aop模塊:提供了一個符合AOP要求的面向切面的編程實現,允許定義方法攔截器和切入點,將代碼按照功能進行分裂,以便干凈的解耦
- spring-aspects模塊:提供了與AspetctJ的集成功能,AspectJ是一個功能強大且成熟的AOP框架
- spring-instrument模塊:提供了類植入(Instrumentation)支持和類加載器的實現,可以在特定的應用服務器中使用
3、消息
spring4.0以后新增了消息(spring-messaging)模塊,該模塊提供了對消息傳遞體系結構的協議的支持。
4、數據訪問/集成
由JDBC、ORM、OXM、JMS和事務模塊組成
- spring-jdbc模塊:提供了一個JDBC的抽象層,消除了繁瑣的JDBC編碼和數據庫廠商特有的錯誤代碼解析。
- spring-tx模塊:支持用於實現特殊接口和所有POJO(普通Java對象)類的編程和聲明式事務管理
- spring-orm模塊:流行的對象關系映射(Object-Relational Mapping)API提供集成層,包括JPA和Hibernate。使用Spring-orm模塊可以將這些O/R映射框架與Spring提供的所有其他功能結合使用,例如聲明式事務管理功能
- spring-oxm模塊:提供了一個支持對象/XML映射的抽象層實現,例如JAXB、Castor、JiBX和XStream。
- spring-jms模塊(Java Message Service):指Java消息傳遞服務,包含用於生產和使用消息的功能。自Spring4.1以來提供了與Spring-messaging模塊的集成
5、Web
Web層有spring-web、spring-webmvc、spring-websocket和Portlet模塊組成
- spring-web:提供了基本的Web開發集成功能,例如多文件上傳功能、使用Servlet監聽器初始化一個IoC容器以及Web應用上下文
- spring-webmvc:也稱為Web-Servlet模塊,包含用於Web應用程序的Spring MVC和REST Web Services實現。Spring MVC框架提供了領域模型代碼和Web表單之間的清晰分離,冰雨Spring Framework的所有其他功能集成
- Portlet模塊:類似於Servlet模塊的功能,提供了Portlet環境下MVC的實現。
- spring-websocket模塊:Spring4.0 以后新增的模塊,它提供了WebSocket和SoeketJS的實現
6、測試
spring-test模塊:支持使用JUnit或TestNG對Spring組件進行單元測試和集成測試。
參考:
https://www.jianshu.com/p/d3233d6322ef
https://www.cnblogs.com/jpwz/p/10556012.html
https://www.cnblogs.com/ysocean/p/7466191.html