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 容器?


<<:  [Day5] Holt's Model 介绍

>>:  Day5-自制网站卷轴(下)_我就特立独行

Leetcode 挑战 Day 12 [ 26. Remove Duplicates from Sorted Array]

26. Remove Duplicates from Sorted Array 今天我们一起挑战le...

Day19 - ImageView(一)

如果一个APP全部都只有文字 是不是看了会觉得很单调 这时候如果加了一个图片 画面是不是看几来就丰富...

How to Reset forgotten root password in RHEL/CentOS 7/8

As a Linux Administrator, You must know the import...

Day7 初探CFS scheduler (上)

前言 上次讲完了过去 Linux 的排程器,今天就来讲讲 CFS (complete fair sc...

过渡到特殊教育需求教学

要考虑的主要和最重要的事情是熟悉不同特殊教育需求的行话和定义。成功的教学要求教师了解每个学生及其个人...