前言
在 Spring Boot 出現之前,開發一個 Spring 項目總會需要添加很多依賴。但是我們在配置依賴的時候,往往不太明確各依賴的具體作用,經常是從網上復制粘貼。
為何需要添加這些依賴?各依賴之間有何關系?某個依賴是否可以省略?要回答這些問題,就有必要了解 Spring 的依賴體系。
搞清了這些問題后,下次配置依賴時,就能很清楚的知道自己需要添加哪些依賴了。
Spring Framwork Modules
這里僅針對 Spring 4 和 Spring 5
Spring 框架被分解成 20 個左右的模塊,這些模塊又按功能分成多個類別:
Core Container
核心容器由 spring-core, spring-beans, spring-context, spring-context-support, 和 spring-expression 組成
spring-core 和 spring-beans
spring-core 和 spring-beans 是 Spring 的基石,提供了基本的 DI (依賴注入)功能。
但是我們基本不需要添加這兩個依賴,因為我們通常都會使用更上層的模塊,而這些上層模塊依賴了它們,我們引入上層模塊后,依賴管理工具會自動鏈入下層依賴。
spring-expression
spring-expression 定義了強大的 Spring 表達式語言,用於在運行時查詢和操作對象。
spring-context 和 spring-context-support
spring-context 建立在 core 和 beans 之上,提供了更高層的 API。其核心是 ApplicationContext。
spring-context-support 則是為將第三方庫整合進 Spring 應用上下文 提供支持。
普通的 Spring 應用只需要引入 spring-context 模塊:
// gradle
implementation group: 'org.springframework', name: 'spring-context', version: '5.0.7.RELEASE'
從上面的依賴關系圖就能知道,四個核心模塊都是它的依賴。
AOP 和 Instrumentation
這一部分包含下列模塊:spring-aop, spring-aspects, spring-instrument, spring-instrument-tomcat
- spring-aop 提供了面向切面編程的實現,它允許你定義攔截器 (interceptors) 和 切點 (pointcuts),用以解耦(decouple) 關注點不同的代碼。
- spring-aspects 整合了 Java 最強大的一個 AOP 庫:AspectJ.
- spring-instrument 提供了用於某些應用程序服務器的類工具支持和類加載器實現.
- spring-instrument-tomcat 是 Spring’s instrumentation agent for Tomcat.
其他的見參考。。懶啊