文章目錄
- Spring簡介
- Spring的組成
- Spring Boot 與Spring Cloud
- IoC理論推導
- IoC的本質
Spring簡介
- Spring——春天:給軟體行業帶來了春天!
- 它適用于任何Java應用,相當于一個模板存在,簡化了服務器端的開發;
- 2002年,首次推出了Spring框架的雛形:interface21框架!于2004年3月24日正式發布1.0版本;
- Spring的理念:使現有的技術更加容易使用,本身是一個大雜燴,整合了現有的技術框架!
- 兩套組合框架:
SSH組合:
Struts2+Spring+Hibernate
SSM組合:SpringMVC+Spring+MyBatis(可定制性高、SQL更靈活)
- Spring本身的相關鏈接:
Spring官網:
https://spring.io/projects/spring-framework#overview
Spring下載地址:
https://repo.spring.io/libs-release-local/org/springframework/spring/
GitHub的地址(Spring本身被開源托管到了GitHub上):
https://github.com/spring-projects
- 使用Maven管理Spring,需要引入的依賴:
我們只需要匯入一個Spring Web MVC的依賴,他會幫我們匯入其他需要的Srping依賴;
<!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.9.RELEASE</version>
</dependency>
還有一個非常常用的包,Spring最后是要與MyBatis整合的,因此需要匯入Spring整合JDBC的依賴:
<!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.2.9.RELEASE</version>
</dependency>
Spring的優點
- Spring是一個開源的免費的框架(容器);
- Spring是一個輕量級的(本身不需要占用太多資源,只需要引入依賴),非入侵式的框架(引入Spring框架不會改變你原有的專案,反而會簡化開發)!
- 控制反轉(IOC)、面向切面編程(AOP);
- 支持事務的處理(支持宣告式事務),對框架整合的支持!
【總結】
Spring 就是一個輕量級的、控制反轉(IOC)和面向切面編程(AOP)的框架!
Spring的組成
- Spring有七大模塊的組成:

現代化的Java開發,說白了就是基于Spring的開發!
組成 Spring 框架的每個模塊(或組件)都可以單獨存在,或者與其他一個或多個模塊聯合實作,每個模塊的功能如下:
-
核心容器:核心容器提供 Spring 框架的基本功能,核心容器的主要組件是 BeanFactory,它是工廠模式的實作,BeanFactory 使用控制反轉(IOC) 模式將應用程式的配置和依賴性規范與實際的應用程式代碼分開, -
Spring 背景關系:Spring 背景關系是一個組態檔,向 Spring 框架提供背景關系資訊,Spring 背景關系包括企業服務,例如 JNDI、EJB、電子郵件、國際化、校驗和調度功能, -
Spring AOP:通過配置管理特性,Spring AOP 模塊直接將面向切面的編程功能 , 集成到了 Spring 框架中,所以,可以很容易地使 Spring 框架管理任何支持 AOP的物件,Spring AOP 模塊為基于 Spring 的應用程式中的物件提供了事務管理服務,通過使用 Spring AOP,不用依賴組件,就可以將宣告性事務管理集成到應用程式中, -
Spring DAO:JDBC DAO 抽象層提供了有意義的例外層次結構,可用該結構來管理例外處理和不同資料庫供應商拋出的錯誤訊息,例外層次結構簡化了錯誤處理,并且極大地降低了需要撰寫的例外代碼數量(例如打開和關閉連接),Spring DAO 的面向 JDBC 的例外遵從通用的 DAO 例外層次結構, -
Spring ORM:Spring 框架插入了若干個 ORM 框架,從而提供了 ORM 的物件關系工具,其中包括 JDO、Hibernate 和 iBatis SQL Map,所有這些都遵從 Spring 的通用事務和 DAO 例外層次結構, -
Spring Web 模塊:Web 背景關系模塊建立在應用程式背景關系模塊之上,為基于 Web 的應用程式提供了背景關系,所以,Spring 框架支持與 Jakarta Struts 的集成,Web 模塊還簡化了處理多部分請求以及將請求引數系結到域物件的作業, -
Spring MVC 框架:MVC 框架是一個全功能的構建 Web 應用程式的 MVC 實作,通過策略介面,MVC 框架變成為高度可配置的,MVC 容納了大量視圖技術,其中包括 JSP、Velocity、Tiles、iText 和 POI,
Spring Boot 與Spring Cloud
-
Spring Boot:一個快速開發的腳手架,基于SpringBoot可以快速的開發單個的微服務,它的核心思想是
“約定大于配置!”; -
Spring Boot專注于快速、方便集成的單個微服務個體,Spring Cloud 關注全域的服務治理框架;
-
Spring Boot使用了約束優于配置的理念,很多集成方案已經幫你選擇好了,能不配置就不配置,Spring Cloud很大的一部分是基于Spring Boot來實作,
Spring Boot可以離開Spring Cloud獨立使用開發專案,但是Spring Cloud 離不開Spring Boot,屬于依賴的關系, -
SpringBoot 在 SpringClound 中起到了承上啟下的作用,如果你要學習 SpringCloud 必須要學習 SpringBoot; -
Spring 的弊端:發展了太久之后,違背了原來的理念,配置十分繁瑣,人稱
“配置地獄”!直到 SpringBoot出現了,才解決了這個問題;
IoC理論推導
- 原來我們創建一個web專案,后臺分包為:
UserDao介面——UserDaoImpl實作類——UserService業務介面——UserServiceImpl實作類;
-
最開始我們肯定是在Service層中創建dao層的物件,然后呼叫dao層提供的方法,這樣,對外就可以直接創建service層的實作類,然后呼叫它的方法,但是這樣有一個弊端,如果我們現在修改了dao層,將它改為了一個
UserDaoSqlServerImpl、UserDaoMySqlImpl、UserDaoOracleImpl的實作類,意味著程式員必須要修改service層的代碼,來配合用戶的需求變化,這樣顯得很繁瑣; -
我們可以在service層給dao層這個成員變數添加get和set訪問器,對外在創建好了service層物件的時候,可以動態的根據需要設定dao層要用到的實作;
-
也就是說:
1、之前,程式是主動創建物件,控制權在程式員手上!
2、使用了set注入之后,程式不再有主動性,而是變成了被動的接收物件;
3、這種思想,從本質上解決了問題,程式員不在管理物件的創建了,系統的耦合性大大的降低,可以更加專注的在業務的實作上!這是IOC思想的原型;

IoC的本質
- 控制反轉本身作為一種設計思想存在,
DI(依賴注入)是實作IoC的其中一種方法; - 沒有IoC的程式中,我們使用面向物件編程,物件的創建與物件間的依賴關系完全硬編碼在程式中,物件的創建由程式自己控制,而控制反轉后將物件的創建轉移給第三方,也就是:
獲得依賴物件的方式反轉了;
比如上面的程式中,最開始創建dao層物件的代碼寫在service層中,由service層控制,但是在提供了set方法之后,呼叫者可以選擇創建什么型別的dao層物件,這也就是獲取物件的方式反轉了;
-
之前的程式中,物件與物件之間存在一定的關聯,一層呼叫一層,是耦合在一起的;使用
IoC容器將這些物件管理起來,它作為第三方存在去連接這些物件,就達到了解耦的目的; -
Spring管理物件的程序大概為:
1、Spring容器在初始化時先讀取組態檔;
2、根據組態檔或元資料創建與組織物件存入容器中;
3、程式使用時再從Ioc容器中取出需要的物件,
- IoC是Spring的核心,Spring本身使用多種方式完美地實作了IoC;
采用XML方式配置Bean的時候,Bean的定義資訊是和實作分離的,而采用注解的方式可以把兩者合為一體,Bean的定義資訊直接以注解的形式定義在實作類中,從而達到了零配置的目的,
【總結】
控制反轉是一種通過描述(XML或注解)并通過第三方去生產或獲取特定物件的方式,在Spring中實作控制反轉的是IoC容器,其實作方法是依賴注入(Dependency Injection,DI);
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/224102.html
標籤:其他
