spring篇(一)牛刀小試
spring大觀園
1.什麼是spring?
spring:是以interface21為基礎,並不斷的豐富其內涵的,由Rod Johnson建立的一個輕量級框架。(順便提一句,這位大佬是悉尼大學的博士,然而他的專業不是計算機相關的,而是音樂學!!! )
其根本使命是:解決企業級應用開發的的複雜性。
核心特徵:IOC(控制反轉)、AOP(面向切面)。
2.spring框架組成
3.spring的優勢?
簡化開發、實現解耦
AOP程式設計
支援宣告式事務處理
方便程式測試
可以整合多種框架
spring IOC
1.什麼是IOC?
IOC:全稱 Inversion of Control,也叫“控制反轉”,它還有一個別名“依賴注入(Dependency Injection)”.是一個輕量級的容器。
IOC的理念:簡單點說,就是讓別人為你服務!!!
IOC最權威的解釋和總結,應該是Martin Fowler的那篇文章“Inversion of Control Containers and the Dependency Injection Pattern”翻譯過來是:控制反轉容器和依賴注入容器。
我個人對IOC理解:IOC 控制反轉就是一種思想,有點像中介的感覺,就比如我們去買房,如果是自己去呢我們是不是要一個一個的去找,這樣是不是很浪費我們的時間,但是你通過中介,你把要需要買的房的預期告訴他,就比如大小、地址、價格、裝修等等。中介是不是就會去找合適的房子來供你參考啊!這樣一來我們是不是大大縮短了時間成本。再深一點理解,中介就好比“IOC容器”,我們買房子的就是“被注入物件”,房子就是“被依賴的物件”,而房子的大小、價格、地段就是“依賴物件的引數”。IOC就是把傳統上程式程式碼直接控制物件的呼叫權交給容器,通過容器來實現對物件的元件的管理和裝配。
2.依賴注入的三種方式?
2.1構造方法注入
構造方法注入:顧名思義,就是被注入的物件通過構造方法中宣告被依賴物件的引數列表,讓IOC容器知道它需要哪些依賴的物件。
例如:
public FXNewProvider(IFNewsListener newsListener,IFXNewspersister newsPersister){
this.newsListener = newsListener;
this.newsPersiter = newsPersister;
}
IOC Service Provider會檢查被注入物件的構造方法,取得它需要的依賴物件列表,進而為其注入相應的物件,注意:同一個物件不可能同時被構造兩次!!!
2.2setter方法注入
對於javaBean物件來說,通常會通過setxxx()和getxxx()來訪問對應屬性。這些setxxx()統稱為setter方法。
public class Component{
priavte Dog dog;
public Dog setDog(Dog dog){
this.dog = dog;
}
public doSomething(){
dog.speek();
}
}
2.3介面注入
這個比起前兩個稍微有點難。被注入的物件如果想要IOC Service Provider為其注入物件,就必須實現某個介面。而這個介面提供一個方法,用來為其注入依賴物件。IOC Service Provider最終通過這些介面瞭解被注入物件需要注入什麼依賴物件。
public interface InjectTion{//通用注入介面
void injectA(Object obj); //其中obj的值通過容器設定
}
public class Component implements interface{
priavte Dog dog;
public void inject(Dog dog){//實現注入方法
this.dog = dog;
}
public doSomething(){
dog.speek();
}
}
2.4三種注入方式的比較
介面注入不提倡,退役狀態。它強制注入物件實現不必要的介面,帶有侵入性。
構造方法注入
優點:物件在構造完成後,已進入就緒狀態,可以馬上使用。
缺點:(i)依賴物件多的時候,構造方法的引數列表較長。
(ii)通過反射構造物件時,對仙童型別的引數處理會比較困難,維護和使用比較麻煩。
(iii)在java中,構造方法無法繼承,無法設定預設值。
setter方法注入
優點:(i)在描述性比構造方法注入要好一點。
(ii)setter方法可以被繼承,允許設定預設值。
(iii)具有良好的IDE支援。
缺點:物件無法在構造完成後,馬上進入就緒狀態。
相關文章
- ElasticSearch學習一-小試牛刀Elasticsearch
- Celery:小試牛刀
- Laravel 事件系統(一)、小試牛刀Laravel事件
- vite plugins小試牛刀VitePlugin
- nodejs redis 小試牛刀NodeJSRedis
- Jena ARQ小試牛刀
- 貼吧小試牛刀
- 第2章 牛刀小試
- Java11 HttpClient小試牛刀JavaHTTPclient
- 分散式鎖--Redis小試牛刀分散式Redis
- Jmeter介面測試例項-牛刀小試JMeter
- Vue.js 牛刀小試(持續更新~~~)Vue.js
- python定時任務之小試牛刀Python
- Abp小試牛刀之 圖片上傳
- python小試牛刀: K-best演算法Python演算法
- 【小試牛刀】Stage-2 裝飾器初探
- 小試牛刀ElasticSearch大資料聚合統計Elasticsearch大資料
- constraintayout新功能montionLayout寫動畫小試牛刀AI動畫
- Golang框架Beego在Windows環境下小試牛刀Golang框架Windows
- Golang框架beego電影網爬蟲小試牛刀Golang框架爬蟲
- 【小白學PyTorch】8 實戰之MNIST小試牛刀PyTorch
- 《Spring 手擼專欄》第 2 章:小試牛刀(讓新手能懂),實現一個簡單的Bean容器SpringBean
- 【Vue.js 牛刀小試】01:第一章 - 一些基礎概念Vue.js
- Flink Restart Strategies重啟策略機制深入剖析-Flink牛刀小試REST
- 現代IT基礎設施管理(1):Terraform初識和小試牛刀ORM
- 《流浪地球 2》 Deepfake 小試牛刀,45+ 吳京「被」年輕,變身 21 歲小鮮肉
- 【藍橋-大試牛刀7-最短路專場】一點提示
- 【Vue.js 牛刀小試】03:第三章 - 事件修飾符的使用Vue.js事件
- Flink 狀態管理與checkPoint資料容錯機制深入剖析-Flink牛刀小試
- Flink CheckPoint狀態點恢復與savePoint機制對比剖析-Flink牛刀小試
- Java最全面試題之Spring篇Java面試題Spring
- Spring Boot系列(一):Spring Boot 入門篇Spring Boot
- 【Vue.js 牛刀小試】05:第五章 - 計算屬性與監聽器Vue.js
- Flink Window分析及Watermark解決亂序資料機制深入剖析-Flink牛刀小試
- 【Vue.js 牛刀小試】05:第五章 – 計算屬性與監聽器Vue.js
- Flink 叢集執行原理兼部署及Yarn執行模式深入剖析-Flink牛刀小試Yarn模式
- JavaScript牛刀小試,結合CSS3動畫屬性來做一個系統時間同步的時鐘JavaScriptCSSS3動畫
- Spring:一篇文章總結 Spring MVCSpringMVC