javascript
Spring的开幕式——Spring概述与设计思想
??前面的話??
本篇文章介紹Spring的定義,相比于與Servlet的優勢,學習難點,以及Spring基本設計思想,Ioc控制反轉,DI等。
📒博客主頁:未見花聞的博客主頁
🎉歡迎關注🔎點贊👍收藏??留言📝
📌本文由未見花聞原創,CSDN首發!
📆首發時間:🌴2022年7月21日
💭推薦書籍:📚《Spring實戰》
💬參考在線編程網站:🌐牛客網🌐力扣
博主的碼云gitee,平常博主寫的程序代碼都在里面。
博主的github,平常博主寫的程序代碼都在里面。
🍭作者水平很有限,如果發現錯誤,一定要及時告知作者哦!感謝感謝!
📌導航小助手📌
- 1.Spring系列框架概述
- 1.1什么是Spring框架
- 1.2為什么要學習框架?
- 1.3Spring框架學習的難點
- 2.Spring框架設計思想
- 2.1Spring框架的概念
- 2.2容器是什么?
- 2.3Ioc是什么?
- 2.4Spring 是Ioc容器
- 2.5DI(依賴注入)
1.Spring系列框架概述
1.1什么是Spring框架
我們通常所說的 Spring 指的是 Spring Framework(Spring 框架),它是?個開源框架,有著活躍而龐大的社區,這就是它之所以能長久不衰的原因。Spring 支持廣泛的應用場景,它可以讓 Java 企業級的 應用程序開發起來更簡單。
??句話概括 Spring:Spring 框架是包含了眾多?具?法的 IoC 容器。
1.2為什么要學習框架?
因為學習框架相當于從“?作坊”到“??”的升級,?作坊什么都要??做,??是組件式裝配,特點就 是?效。 框架更加易?、簡單且?效。
使? Spring Boot 項?演示框架相?于 Servlet 所具備的以下優點:
或者說使用Servlet相比于Spring Boot有以下的不足:
1.3Spring框架學習的難點
- 配置?較多。
- 需要?量的外部 jar 包,在下載時容易出錯。
- 會涉及簡單的軟件?程的設計思想(分層思想:前后端的分層思想;后端?程的分層思想)。
- 知識點相對來說?之前的知識更加的分散,要仔細聽才能搞懂各個知識點的邏輯關系。
- 要記的東?很多,所以要?量地重復練習才能記住,?如各種注解。
Spring框架基本學習路線:Spring->Spring Boot->Spring MVC->MyBatis等
2.Spring框架設計思想
2.1Spring框架的概念
一句話: Spring 框架是包含了眾多工具方法的 IoC 容器。
2.2容器是什么?
容器是用來容納某種物品的(基本)裝置。 就比如Map與Set屬于數據儲存的容器,Tomcat屬于Web容器,同理Spring是一個Ioc容器,它包含了許多的工具和方法。
2.3Ioc是什么?
Ioc即IoC = Inversion of Control,直譯過來就是控制反轉的意思,這是一個比較抽象的概念,我們來通過一個例子來了解它。
我們都知道汽車,它包含輪胎,底座,車身等,我們造一輛汽車時,需要有車身,而車身需要有輪胎,最原始的想法就是造車時,需要車身,于是就new一個車身,而車身需要底座,于是就new一個底座,同理底座需要輪胎,那就造底座前new一個輪胎。
我們不難得到以下代碼:
public class NewCarExample {public static void main(String[] args) {Car car = new Car();car.init();}/*** 汽?對象*/static class Car {public void init() {// 依賴?身Framework framework = new Framework();framework.init();}}/*** ?身類*/static class Framework {public void init() {// 依賴底盤Bottom bottom = new Bottom();bottom.init();}}/*** 底盤類*/static class Bottom {public void init() {// 依賴輪胎Tire tire = new Tire();tire.init();}}/*** 輪胎類*/static class Tire {// 尺?private int size = 30;public void init() {System.out.println("輪胎尺?:" + size);}} }但是,我們的產品不是一成不變的,產品經理提出一個需求,說這個輪胎大小希望可以個性化,在產品經理眼里,這個問題的解決方案只是改一個參數而已,但是根據我們上面寫的代碼,我們需要往輪胎Tire類的構造方法加上一個參數,由于底盤Bottom類控制著Tire類,那么底盤類的構造方法也需要加上一個參數,以此類推,我們的車身Framework類與汽車Car類都需要為構造方法加上參數,于是我們得到了如下的代碼:
public class NewCarUpdateExample {public static void main(String[] args) {Car car = new Car(20);car.run();}/*** 汽?對象*/static class Car {private Framework framework;public Car(int size) {framework = new Framework(size);}public void run() {// 依賴?身framework.init();}}/*** ?身類*/static class Framework {private Bottom bottom;public Framework(int size) {bottom = new Bottom(size);}public void init() {// 依賴底盤bottom.init();}}/*** 底盤類*/static class Bottom {private Tire tire;public Bottom(int size) {tire = new Tire(size);}public void init() {// 依賴輪胎tire.init();}}/*** 輪胎類*/static class Tire {// 尺?private int size;public Tire(int size) {this.size = size;}public void init() {System.out.println("輪胎尺?:" + size);}} }這樣,如果需要個性化定制輪胎的大小,就可以只改動構造Car對象傳入的參數就可以了。但是,如果產品經理又加上一個需求,說要定制輪胎的顏色,那我們又要加參數,加參數就意味著代碼都得改,這樣的代碼耦合性太高了,為了解決這個問題,我們可以依據loc的思想,我們將控制權交出去,換句話說,需要輪胎Tire類時,你給我傳一個Tire對象,我不去new一個Tire對象了,這樣的話,就算在Tire類加參數也只需要改動Tire類的構造方法與相關執行方法與屬性,頂多再改一下Tire對象的創建,同理其他類也一樣,將對象作為參數傳入到上級類的構造方法中去就行了,這個過程也叫做傳入或注入。
由于我們創建Car時需要Framework,所以先要實例一個Framework對象,同理實例一個Framework對象需要Bottom對象,那么需先實例一個Bottom對象,一樣,在實例Bottom對象之前需要實例一個Tire對象,于是需要先后創建Tire對象,Bottom對象,Framework對象后才能創建一個Car對象,我們可以得到如下的代碼:
所以如果產品經理更改了需求,需要加參數或減少參數,Ioc的代碼只需改動圖中的兩處代碼即可,達到了解耦的目的。
在傳統的代碼中對象創建順序是:Car -> Framework -> Bottom -> Tire
改進之后解耦的代碼的對象創建順序是:Tire -> Bottom -> Framework -> Car
所以Ioc有以下的優點:對象(Bean)的生命周期交給Ioc框架維護,作為程序員無需關注,說白點就是程序員不需要關注對象創建和銷毀時機,這些工作加個Ioc框架(也就是Spring)做就行。
2.4Spring 是Ioc容器
我們知道Spring框架包含了多個工具方法放入Ioc容器,既然是容器,那它就有存于取的功能,這也是Spring最核心的功能:
- 將Bean(對象)存儲到Spring容器中。
- 將Bean(對象)從Spring容器中取出來。
Spring 是?個 IoC 容器,Bean對象的創建和銷毀的權利都交給 Spring 來管理了,它本身?具備了存儲對象和獲取對象的能力。
2.5DI(依賴注入)
DI,即Dependency Injection,依賴注入。在pom.xml有一個依賴項,用來導入外部的資源,而這里的依賴注入,導入的不是外部的資源,而是對象。
所謂依賴注?,就是由 IoC 容器在運?期間,動態地將某種依賴關系注?到對象之中。所以,依賴注?(DI)和控制反轉(IoC)是從不同的?度的描述的同?件事情,就是指通過引? IoC 容 器,利?依賴關系注?的?式,實現對象之間的解耦。
Ioc與DI的區別是什么?
Ioc是一種思想,而DI是一種實現。
下期預告:spring 項目創建
覺得文章寫得不錯的老鐵們,點贊評論關注走一波!謝謝啦!總結
以上是生活随笔為你收集整理的Spring的开幕式——Spring概述与设计思想的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Centos7中Memcached安装使
- 下一篇: python高斯求和_二、算法分析