iT邦幫忙

2021 iThome 鐵人賽

DAY 5
1
Modern Web

誤打誤撞學了Spring Boot 還當了後端工程師系列 第 5

Day 05 - IoC 容器與Servlet 容器

看完基本介紹後,相信大家已經對Spring Boot 有些基礎的認識了,再來就介紹Spring 中兩個重要的概念,IoC 以及Servlet 容器。

IoC 與DI/DL

IoC

IoC,全名為Inversion of Control,中文名稱為控制反轉,指的是物件導向程式設計中的一種設計方式,概念是一種依賴關係的轉移,它將程式中建立物件的控制權交給Spring 架構來管理,也就是獲得物件的過程被反轉了,降低了物件之間的耦合性,讓物件之間的關係都依賴於第三方容器。

舉例來說,一般在建立物件時,我們都會使用new 關鍵字來建立一個物件,但也因此使用new 關鍵字建立物件的Class 與物件所對應的Class 就產生了耦合性。

而IoC 就是用來解決上述問題的一種設計方式,它將建立物件的工作交由IoC 容器處理,我們只需要告訴IoC 容器需要建立那些物件(Bean),IoC 容器建立好物件之後再將物件注入到指定的地方,此時,需要使用物件的Class 並不主動建立物件,而是由IoC 容器進行分配管理,控制權均在IoC 容器上,這就是控制反轉。

DI

DI,全名為Dependency Injection,中文名稱為依賴注入,上面說IoC 是一種概念,而DI 就是IoC 的一種實作方法,可將IoC 容器建立的物件在執行期間動態地注入到指定的地方,透過依賴注入的機制,我們只需要簡單的配置就可以取得需要的資源,最終完成自身的業務邏輯,而這期間並不需要關心資源從何而來、由誰實現。

總結

由下圖來解說,原先是類別A 需要使用類別B 的物件,主動建立(new)了類別B 的實體,而控制反轉則是由IoC 容器建立(new)並管理類別B 的實體再由IoC 容器注入到需要使用類別B 的物件的類別中
https://ithelp.ithome.com.tw/upload/images/20210920/20140728pGDMw1oLVx.png

Servlet 與Servlet 容器

Servlet

Servlet 全名為Java Servlet,是Java 編寫的伺服器端程式,由Servlet 容器所管理,主要根據HTTP 請求呼叫不同的業務邏輯來處理並回應。

Servlet Container

Servlet Container就是用來管理和載入Servlet,接收HTTP 請求之後找到對應的Servlet。

舉例來說,一般請求/回應的流程如下

  1. 用戶端對Web 伺服器發出HTTP 請求。
  2. Web 伺服器接收HTTP 請求,將請求轉交Web 容器處理,Web 容器會解析HTTP 請求內容,建立各種物件(例如HttpServletRequest、HttpServletResponse、HttpSession 等)。
  3. Web 容器由請求的URL 決定要使用哪個Servlet 來處理請求(事先由開發人員定義)。
  4. Servlet 根據請求物件(HttpServletRequest) 的資訊來決定如何處理,透過回應物件(HttpServletResponse) 來建立回應。
  5. Web 容器與Web 伺服器溝通,Web 伺服器將回應轉換為HTTP 回應並傳回用戶端。

其中,Web 容器即為HTTP 伺服器 + Servlet 容器,因為單單Servlet 容器並沒有解析HTTP 請求、通訊等功能,所以把Tomcat、Jetty 等實現包含了HTTP 伺服器和Servlet 容器的功能,稱之為Web 容器。
https://ithelp.ithome.com.tw/upload/images/20210920/20140728m2DJOGELT1.png

參考網站

控制反轉 (IoC) 與 依賴注入 (DI) - NotFalse 技術客
簡單談談Spring的IoC
何謂容器
為什麼要有 Servlet ,什麼是 Servlet 容器,什麼是 Web 容器?


上一篇
Day 04 - Spring Boot 的前世今生
下一篇
Day 06 - MVC 與三層架構
系列文
誤打誤撞學了Spring Boot 還當了後端工程師30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言