看完基本介紹後,相信大家已經對Spring Boot 有些基礎的認識了,再來就介紹Spring 中兩個重要的概念,IoC 以及Servlet 容器。
IoC,全名為Inversion of Control,中文名稱為控制反轉,指的是物件導向程式設計中的一種設計方式,概念是一種依賴關係的轉移,它將程式中建立物件的控制權交給Spring 架構來管理,也就是獲得物件的過程被反轉了,降低了物件之間的耦合性,讓物件之間的關係都依賴於第三方容器。
舉例來說,一般在建立物件時,我們都會使用new 關鍵字來建立一個物件,但也因此使用new 關鍵字建立物件的Class 與物件所對應的Class 就產生了耦合性。
而IoC 就是用來解決上述問題的一種設計方式,它將建立物件的工作交由IoC 容器處理,我們只需要告訴IoC 容器需要建立那些物件(Bean),IoC 容器建立好物件之後再將物件注入到指定的地方,此時,需要使用物件的Class 並不主動建立物件,而是由IoC 容器進行分配管理,控制權均在IoC 容器上,這就是控制反轉。
DI,全名為Dependency Injection,中文名稱為依賴注入,上面說IoC 是一種概念,而DI 就是IoC 的一種實作方法,可將IoC 容器建立的物件在執行期間動態地注入到指定的地方,透過依賴注入的機制,我們只需要簡單的配置就可以取得需要的資源,最終完成自身的業務邏輯,而這期間並不需要關心資源從何而來、由誰實現。
由下圖來解說,原先是類別A 需要使用類別B 的物件,主動建立(new)了類別B 的實體,而控制反轉則是由IoC 容器建立(new)並管理類別B 的實體,再由IoC 容器注入到需要使用類別B 的物件的類別中。
Servlet 全名為Java Servlet,是Java 編寫的伺服器端程式,由Servlet 容器所管理,主要根據HTTP 請求呼叫不同的業務邏輯來處理並回應。
Servlet Container就是用來管理和載入Servlet,接收HTTP 請求之後找到對應的Servlet。
舉例來說,一般請求/回應的流程如下
其中,Web 容器即為HTTP 伺服器 + Servlet 容器,因為單單Servlet 容器並沒有解析HTTP 請求、通訊等功能,所以把Tomcat、Jetty 等實現包含了HTTP 伺服器和Servlet 容器的功能,稱之為Web 容器。
控制反轉 (IoC) 與 依賴注入 (DI) - NotFalse 技術客
簡單談談Spring的IoC
何謂容器
為什麼要有 Servlet ,什麼是 Servlet 容器,什麼是 Web 容器?