目錄
- JavaWeb三大組件
- 依賴注入的方式
- @Autowire和@Resurce有什么區別?
- Spring Boot的優點
- Spring IoC是什么?
- 說說Spring Aop的優點
- @Component和@Bean的區別
- 自定義注解時使用的RetentionPolicy枚舉類有哪些值?
- 如何理解Spring的SPI機制?
- Spring Boot自動裝配原理
- Spring MVC工作原理
JavaWeb三大組件
-
Servlet
:Servlet是JavaWeb應用程序中處理請求和生成響應的基本組件。它是一個Java類,通過實現或繼承Servlet接口來處理客戶端請求,并生成響應數據。 -
Listener
:監聽器用于監聽Web應用程序中的事件,并在事件發生時執行相應的邏輯處理。使用場景:
- 初始化
- 釋放資源
- 日志記錄
-
Filter
:過濾器用于在請求和響應的處理過程中對數據進行攔截和處理。一個請求可以經過多個過濾器的處理,每個過濾器可以在請求的處理前后進行操作和攔截。使用場景:
- 權限驗證
- 請求轉發
- 日志記錄
- 字符編碼
總結而言
- Servlet程序用于處理請求和生成響應數據
- Listener監聽器用于監聽特定的Web應用程序事件執行相應邏輯
- Filter過濾器用于對請求和響應數據進行攔截和處理。
它們各自在Web應用程序開發中具有重要的作用,能夠實現靈活的請求處理、事件監聽和數據過濾。
依賴注入的方式
在 Spring 中實現依賴注入的常見方式有以下 3 種:
- 屬性注入(Field Injection)
- @Autowire實現屬性注入
- @Resurce實現屬性注入
- Setter 注入(Setter Injection)
- 構造方法注入(Constructor Injection)
@Autowire和@Resurce有什么區別?
-
autowire是Spring提供的;resource是J2EE提供的
-
resource默認使用name裝配,當找不到name時,會按類型裝配
-
AutoWire默認按類型裝配,如果要使用名稱裝配可以用@Qualifier結合使用
Spring Boot的優點
-
開箱即用
通過在pom文件中添加相關依賴包,然后使用對應注解來代替繁瑣的XML配置文件以管理對象的生命周期
-
約定優于配置
約定優于配置(convention over configuration),也稱作按約定編程,是一種軟件設計范式,旨在減少軟件開發人員需要的配置。
-
內置tomcat
Spring IoC是什么?
IoC(Inversion of Control:控制反轉) 是一種設計思想,而不是一個具體的技術實現,IoC 的思想就是將原本在程序中手動創建對象的控制權,交由 Spring 框架來管理。
-
為什么叫控制反轉?
控制:指的是對象創建(實例化、管理)的權力
反轉:控制權交給外部環境(Spring 框架、IoC 容器) -
Spring IoC的實現機制:工廠模式+反射機制
說說Spring Aop的優點
- 減少系統的重復代碼
- 降低模塊間的耦合度
- 封裝切面邏輯
@Component和@Bean的區別
-
@Component 注解用在類上,表明一個類會作為組件類,并告知Spring要為這個類創建bean,每個類對應一個 Bean。
-
@Bean 注解用在方法上,表示這個方法會返回一個 Bean。
-
@Bean 注解更加靈活,相比@Component注解自定義性更強
自定義注解時使用的RetentionPolicy枚舉類有哪些值?
值 | 源代碼 | 類文件 | 虛擬機 |
---|---|---|---|
SOURCE | ?? | ||
CLASS | ?? | ?? | |
RUNTIME | ?? | ?? | ?? |
當值設為SOURCE
,只有源文件中可以看到注解
當值設為CLASS
,可在源文件和編譯后的Class文件中可以看到注解
當值設為RUNTIME
,不僅在源文件和編譯后的Class文件中可以看到注解,JVM還能通過反射機制獲取到注解
如何理解Spring的SPI機制?
- Java SPI
SPI 全稱 Service Provider Interface,是 Java提供的一套用來被第三方實現或者擴展的接口,它可以用來啟用框架擴展和替換組件。
SPI的作用就是為這些被擴展的API 尋找服務實現。本質是通過基于接口的 編程+策略模式+配置文件 實現動態加載。可以實現 解耦 (接口和實現分離),提高框架的 可拓展性(第三方可以自己實現,達到插拔式的效果)。
- Spring SPI
Spring SPI對 Java SPI 進行了封裝增強。我們只需要在 META-INF/spring.factories
中配置接口/類/注解名,即可通過服務發現機制,在運行時進行自動加載。
Spring Boot自動裝配原理
Spring Boot自動裝配如下圖所示:
Springboot項目的啟動類需要由 @SpringBootApplication 注解修飾,該注解復合了如下三個注解。
-
@SpringBootConfiguration。表明Springboot啟動類是一個配置類;
-
@ComponentScan。會將指定路徑下的被特定注解修飾的類加載為Spring中的Bean,這些特定注解為@Component,@Controller,@Service,@Repository和@Configuration注解;
-
@EnableAutoConfiguration。用于開啟Springboot的自動裝配,該注解復合了如下兩個核心注解。
- @AutoConfigurationPackage。用于將啟動類所在的包里面的所有組件注冊到spring容器。
- @Import(AutoConfigurationImportSelector.class)
-
自動裝配流程說明(重要):
- @Import 將 AutoConfigurationImportSelector 注入到spring容器中
- AutoConfigurationImportSelector 通過 SpringFactoriesLoader 從類路徑下去讀取
META-INF/spring.factories
文件信息 - 此文件中有一個key為
org.springframework.boot.autoconfigure.EnableAutoConfiguration
,定義了一組需要自動配置的bean
Spring MVC工作原理
Spring MVC 原理如下圖所示:
- 流程說明(重要):
- 客戶端(瀏覽器)發送請求, DispatcherServlet攔截請求。
- DispatcherServlet 根據請求信息調用 HandlerMapping 。HandlerMapping 根據 URL 去匹配查找能處理的 Handler(也就是我們平常說的 Controller 控制器) ,并會將請求涉及到的攔截器和 Handler 一起封裝。
- DispatcherServlet 調用 HandlerAdapter適配器執行 Handler 。
- Handler 完成對用戶請求的處理后,會返回一個 ModelAndView 對象給DispatcherServlet,ModelAndView 顧名思義,包含了數據模型以及相應的視圖的信息。Model 是返回的數據對象,View 是個邏輯上的 View。
- ViewResolver 會根據邏輯 View 查找實際的 View。
- DispaterServlet 把返回的 Model 傳給 View(視圖渲染)。
- 把 View 返回給請求者(瀏覽器)