Spring IoC 的工作流程:
- 讀取 BeanDefinition:?Spring 容器啟動時,會讀取 Bean 的配置信息 (例如 XML 配置文件、注解或 Java 代碼),并將這些配置信息轉換為?
BeanDefinition
?對象。 - 創建 Bean 實例:?根據?
BeanDefinition
?中的信息,Spring 容器使用反射機制創建 Bean 的實例。 - 解析依賴關系:?Spring 容器解析 Bean 的依賴關系,找到 Bean 所依賴的其他 Bean。
- 注入依賴:?Spring 容器使用依賴注入的方式,將依賴對象注入到 Bean 中。
- Bean 的生命周期管理:?Spring 容器負責管理 Bean 的生命周期,包括初始化、使用和銷毀。
自動裝配的核心概念:
-
@EnableAutoConfiguration
:- 這是一個復合注解,通常放在 Spring Boot 應用的啟動類上。
- 它啟用了 Spring Boot 的自動配置機制。
- 它實際上包含了?
@AutoConfigurationPackage
?和?@Import(AutoConfigurationImportSelector.class)
?兩個注解。
-
@AutoConfigurationPackage
:- 它用于指定自動配置的基礎包。
- Spring Boot 會掃描該包及其子包下的所有組件 (例如?
@Component
,?@Service
,?@Repository
,?@Controller
?等),并將它們注冊為 Bean。 - 通常情況下,
@AutoConfigurationPackage
?會自動掃描啟動類所在的包作為基礎包。
-
AutoConfigurationImportSelector
:- 它是自動配置的核心組件。
- 它負責掃描所有符合自動配置條件的類,并將它們導入到 Spring 容器中。
- 它主要通過以下幾個步驟來實現自動配置:
- 掃描?
META-INF/spring.factories
?文件:?AutoConfigurationImportSelector
?會掃描所有 jar 包中的?META-INF/spring.factories
?文件。 - 加載自動配置類:?
spring.factories
?文件中定義了大量的自動配置類,AutoConfigurationImportSelector
?會加載這些類。 - 條件過濾:?
AutoConfigurationImportSelector
?會根據一定的條件對自動配置類進行過濾,只有滿足條件的自動配置類才會被導入到 Spring 容器中。 - 導入自動配置類:?
AutoConfigurationImportSelector
?使用?@Import
?注解將符合條件的自動配置類導入到 Spring 容器中。
- 掃描?
-
條件注解 (Conditional Annotations):
- Spring Boot 提供了大量的條件注解,用于控制自動配置類的生效條件。
?MyBatis中一級緩存和二級緩存有什么差別?
1. 一級緩存 (Local Cache):
- 作用域:?SqlSession 級別。
- 生命周期:?與 SqlSession 的生命周期相同。 當 SqlSession 關閉時,一級緩存也會被清空。
- 存儲介質:?內存。
- 工作原理:
- 當執行一個查詢語句時,MyBatis 首先會從一級緩存中查找是否存在相同的 SQL 語句和參數。
- 如果存在,則直接從一級緩存中返回結果,避免訪問數據庫。
- 如果不存在,則訪問數據庫,并將查詢結果放入一級緩存中。
- 當執行更新、插入或刪除語句時,MyBatis 會清空一級緩存,以保證數據的一致性。
- 優點:
- 提高查詢性能,減少數據庫訪問次數。
- 實現簡單,無需額外配置。
- 缺點:
- 緩存范圍小,只能在單個 SqlSession 中共享。
- 并發性差,多個 SqlSession 之間無法共享緩存。
- 默認開啟:?一級緩存默認開啟,無需手動配置。
- 清空時機:
- 執行更新、插入或刪除語句時。
- 手動調用?
SqlSession.clearCache()
?方法時。 - SqlSession 關閉時。
2. 二級緩存 (Second Level Cache):
- 作用域:?Mapper 級別 (namespace 級別)。
- 生命周期:?與應用程序的生命周期相同。
- 存儲介質:?可以配置為內存、磁盤或其他存儲介質。
- 工作原理:
- 當執行一個查詢語句時,MyBatis 首先會從二級緩存中查找是否存在相同的 SQL 語句和參數。
- 如果存在,則直接從二級緩存中返回結果,避免訪問數據庫。
- 如果不存在,則訪問數據庫,并將查詢結果放入二級緩存中。
- 當執行更新、插入或刪除語句時,MyBatis 會清空二級緩存中與該語句相關的緩存區域,以保證數據的一致性。
- 優點:
- 提高查詢性能,減少數據庫訪問次數。
- 緩存范圍大,可以在多個 SqlSession 之間共享。
- 并發性好,多個 SqlSession 可以同時訪問二級緩存。
- 缺點:
- 實現復雜,需要手動配置。
- 數據一致性難以保證,需要謹慎使用。
- 默認關閉:?二級緩存默認關閉,需要手動配置才能開啟。
- 清空時機:
- 執行更新、插入或刪除語句時,會清空與該語句相關的緩存區域。
- 手動配置緩存刷新策略。
- 應用程序關閉時。
?