Spring篇:什么是Spring


Spring框架

1、 什么是Spring

Spring是目前主流的Java Web開發框架,是分層的Java SE/EE一站式輕量級開源框架,以IoC(Inverse of Control,控制反轉)和AOP(Aspect Oriented Programming,面向切面編程)為內核。

1.1 Spring全家桶

Spring自誕生以來一直備受青睞,它包括許多框架,例如Spring framework、SpringMVC、SpringBoot、Spring Clound、Spring Data、Spring Security等,所以有人將它們親切地稱之為:Spring全家桶。

  • Spring framework:也就是我們經常說的spring框架,包括了IoC依賴注入,Context上下文,Bean管理,SpringMVC等眾多功能模塊,其他的Spring框架比如spring boot也會依賴於Spring framework。

  • Spring boot:它的目標是簡化Spring應用和服務的創建、開發與部署,簡化了配置文件,使用嵌入式web服務器,含有諸多開箱即用的微服務功能,可以和spring clound聯合部署。Spring Boot的核心思想是約定大於配置,應用只需要很少的配置即可,簡化了應用開發模式。

  • Spring Data:是一個數據訪問及操作的工具集,封裝了多種數據源的操作能力,包括:jdbc、Redis、

  • Spring Cloud:是一整套完整的微服務解決方案,是一系列不同功能的微服務框架的集合,Spring Cloud基於Spring Boot,簡化了分布式系統的開發,繼承了服務發現、配置管理、消息總線、負載均衡、斷路器、數據監控等各種服務治理能力。比如sleuth提供了全鏈路追蹤能力,Netfix套件提供了hystrix熔斷器、zuul網關等眾多的治理組件。config組件提供了動態配置能力,bus組件支持使用RabbitMQ、kafka、Activemq等消息隊列,實現分布式服務之間的時間通信。

  • Spring Security:主要用於快速構建安全的應用程序和服務,在Srping Boot和Spring Security OAuth2的基礎上,可以快速實現常見安全模型,如單點登錄,令牌中繼和令牌交換。oauth2授權機制和jwt認證方式的關系:oauth2是一種授權機制,規定了完備的授權、認證流程;JWT全稱是JSON Web Token,是一種把認證信息包含在token中的認證實現,oauth2授權機制中就可以應用jwt來作為認證的具體實現方法。

1.2 MVC框架

在MVC模式中,M是指業務模型,V是指用戶界面,C則是控制器。MVC框架指MVC模式的某種框架,它強制性地使應用程序的輸入、處理和輸出分開。使用MVC應用程序被分為三個核心部件:模型、視圖、控制器。其中模型負責內部數據模型,控制器負責請求的分發控制,視圖負責返回給用戶展示的視圖。

常見的MVC框架包含:

  • JSP + javabean + servlet

  • SSH:Structs2、Spring、Hibernate

  • SSM:SpringMVC、Spring、Mynatis

其中SSH組合已經逐漸被SSM組合替代,一方面原因是structs對幾次安全漏洞的處理,讓大家對structs的信息受到影響;另一方面,Spring MVC更加地靈活,不需要額外配置,不存在和Spring整合等問題,使用更加方便。

1.3 一些基本概念

1.3.1 Ioc(Inversion of control) 控制反轉

控制權由對象本身轉向容器,容器根據配置文件創建實例並創建各個實例之間的依賴關系。

即控制權的轉移,將我們創建對象的方式反轉了,以前對象的創建是由我們開發人員自己維護,包括依賴關系也是自己注入。使用spring之后,可以由spring完成對象的創建和關系的注入。反轉控制就是反轉了對象的創建方式,從我們自己創建反轉給了程序創建。

1.3.2 AOP(Aspect Oriented Programming)

也就是面向方面編程的技術。AOP基於IoC的基礎,是OOP的有益補充。

“一般而言,我們管切入到指定類指定方法的代碼片段稱為切面,而切入到哪些類、哪些方法則叫切入點。有了AOP,我們就可以把幾個類共有的代碼,抽取到一個切片中,等到需要時再切入對象中去,從而改變其原有的行為。”

“這樣看來,AOP其實只是OOP的補充而已。OOP從橫向上區分出一個個的類來,而AOP則從縱向上向對象中加入特定的代碼。有了AOP,OOP變得立體了。如果加上時間維度,AOP使OOP由原來的二維變為三維了,由平面變成立體了。從技術上來說,AOP基本上是通過代理機制實現的。”

“AOP在編程歷史上可以說是里程碑式的,對OOP編程是一種十分有益的補充。”

“面向方面編程就是一種讓人在需要的時候隨意地加入代碼的方式,是一種在運行時,動態地將代碼切入到類的指定方法、指定位置上的編程思想。”

1.3.3 DI Dependency Injection 依賴注入

Spring這個容器中,替你管理着一系列的類,前提是你需要將這些類交給Spring容器進行管理,然后在你需要的時候,不是自己去定義,而是直接向spring容器直接索取,當spring容器知道你的需求之后,就會去它所管理的組件中進行查找,然后直接給你所需要的組件。

1.3.4 關於耦合性的思考

關於面向對象編程的三大特征:封裝、繼承、多態。繼承的好處是抽取了重復代碼,加強了類之間的聯系,但壞處也是加大了耦合性。面向對象編程追求高內聚,低耦合,那么耦合性高有什么不好?我舉個例子。

當你有個實例--輪子,這個輪子是個獨立模塊,你調用它就可以跑,里面要改什么都很方便。 當你有個繼承自生物類->哺乳類->狗->哈士奇的實例,或許父類中定義好了方法(譬如跑、吃飯……)可以很方便地繼承,但是哪天你想給哈士奇這個類增加(睡覺)的方法,你就要往上考慮怎么改,改狗類?狗類下其他子類怎么改?改哺乳類?哺乳類的子類怎么改?哺乳類的子類的子類怎么改?改了會有什么問題?……這就是高耦合性。

有時候你會覺得繼承給你提供了方便,但是耦合性太高也會引發各種問題。一個低耦合的獨立模塊你想改什么拆下來改改,只要原有的方法依舊能跑通,裝回去就能繼續用。高耦合性的模塊之間的更改則要慎重得多。

1.4 Spring框架的特點

  • 方便解耦,簡化開發:Spring就是一個大工廠,可以將所有對象的創建和依賴關系的維護交給Spring管理。

  • 方便集成各種優秀框架:其內部提供了對各種優秀框架(如Structs2、Hibernate、MyBatis等)的直接支持。

  • 降低Java EE API的使用難度:Spring對Java EE開發中非常難用的一些API(JDBC、JavaMail、遠程調用等)都提供了封裝、使這些API應用的難度大大降低。)

  • 方便程序的測試:Spring支持Junit4,可以通過注解方便地測試Spring程序。

  • AOP編程的支持:Spring提供面向切面編程,可以方便地實現對程序進行權限攔截和運行監控等功能。

  • 聲明式事務的支持:只需要通過配置就可以完成對事務的管理,而無需手動編程。

2 Spring體系結構

參考Spring體系結構

Spring框架采用分層的理念,根據功能的不同划分成多個模塊,這些模塊大體可分為Data Access/Integration(數據訪問與繼承)、Web、AOP、Aspects、Instrumentation(檢測)、Messaging(消息處理)、Core Container(核心容器)和Test。如下圖所示(以下是Spring Framework 4.x版本后的系統架構圖)。

上圖包含了Spring框架的所有模塊,這些模塊可以滿足一切企業級應用開發的需求,在開發過程中可以根據需求有選擇地使用所需要的模塊。下面分別對這些模塊的作用進行簡單介紹。

2.1 Data Access/Integration(數據訪問/集成)

數據訪問/集成層包括JDBC、ORM、OXM、JMS和Transactions模塊。具體介紹如下。

  • JDBC模塊:提供了一個JBDC的樣例模板,使用這些模板能消除傳統冗長的JDBC編碼還有必須的事務控制,而且能享受到Spring管理事務的好處。

  • ORM模塊:提供與流行的“對象-關系”映射框架無縫集成的API,包括JPA、JDO、Hibernate和MyBatis等。而且還可以使用Spring事務管理,無需額外控制事務。

  • OXM模塊:提供了一個支持Object/XML映射的抽象層實現,如JAXB、Castor、XMLBeans、JiBX和XStream。將Java對象映射成XML數據,或者將XML數據映射成Java對象。

  • JMS模塊:指Java消息服務,提供一套“消息生產者、消息消費者”末班用於更加簡單的使用JMS,JMS用於在兩個應用程序之間,或分布式系統中發送消息,進行異步通信。

  • Transactions事務模塊:支持編程和聲明式事務管理。

2.2 Web模塊

Spring的Web層包括Web、Servlet、WebSocket和Portlet組件,具體介紹如下。

  • Web模塊:提供了基本的Web開發集成特性,例如多文件上傳功能、使用的Servlet監聽器的IOC容器初始化以及Web應用上下文。

  • Servlet模塊:提供了一個Spring MVC Web框架實現。Spring MVC框架提供了基於注解的請求資源注入、更簡單的數據綁定、數據驗證等及一套非常易用的JSP標簽,完全無縫與Spring其他技術協作。

  • WebSocket模塊:提供了簡單的接口,用戶只要實現響應的接口就可以快速的搭建WebSocket Server,從而實現雙向通訊。

  • Portlet模塊:提供了在Portlet環境中使用MVC實現,類似Web-Servlet模塊的功能。

2.3 Core Container(Spring的核心容器)

Spring的核心容器是其他模塊建立的基礎,由Beans模塊、Core核心模塊、Context上下文模塊和SpEL表達式語言模塊組成,沒有這些核心容器,也不可能有AOP、Web等上層的功能。

  • Beans模塊:提供了框架的基礎部分,包括控制反轉和依賴注入

  • Core核心模塊:封裝了Spring框架的底層部分,包括資源訪問、類型轉換以及一些常用的工具類。

  • Context上下文模塊:建立在Core和Beana模塊的基礎之上,繼承Beans模塊功能並添加資源綁定、數據驗證、國際化、Java EE支持、容器生成周期、事件傳播等。ApplicationContext接口是上下文模塊的焦點。

  • SpEL模塊:提供了強大的表達式語言支持,支持訪問和修改屬性值,方法調用,支持訪問及修改數組、容器和索引器,命名變量,支持算數和邏輯運算,支持從Spring容器獲取Bean,它也支持列表投影、選擇和一般的列表聚合等。

 

2.4 AOP、Aspects、Instrumentation和Messaging

在Core Container之上是AOP、Aspects等模塊,具體介紹如下:

  • AOP模塊:提供了面向切面編程實現,提供比如日志記錄、權限控制、性能統計等通用功能和業務邏輯分離的技術,並且能動態地把這些功能添加到需要的代碼中,這樣各司其職,降低業務邏輯和通用功能的耦合。

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

  • Instrumentation模塊:提供了類工具的支持和類加載器的實現,可以在特定的應用服務器中使用。

  • messaging模塊:Spring 4.0 以后新增了消息(Spring-messaging)模塊,該模塊提供了對消息傳遞體系結構和協議的支持。

2.5 Test模塊

Spring支持Junit和TestNG測試框架,而且還額外提供一些基於Spring的測試功能,比如在測試Web框架時,模擬Http請求的功能。

 

參考

Spring詳解(概述、組件詳解、加載流程)

Spring框架總結【無比詳細】

Spring框架入門教程

Java中最強大的框架spring

Spring框架詳解

【Spring】詳解Spring全家桶

struts和struts2的區別

SSH和SSM區別

 

碎碎念:有時候做一件事情並不一定花費太多時間,尤其在你堅決不碰手機的前提下


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM