1. @Order 注解和 Ordered 接口
- 用途:控制組件執行順序或排序,但不控制Bean初始化順序。
- 定義執行順序:通過整數值指定組件優先級,數值越小優先級越高。
- 集合排序:影響自動裝配到集合中的組件排列順序。
- 使用場景:
- 攔截器排序:控制Spring MVC攔截器執行順序。
- Spring Security Filters:定義Spring Security過濾器鏈順序。
- 事件監聽器:控制多個監聽同一事件的監聽器觸發順序。
- Bean集合注入:確保特定類型的Bean集合按指定順序注入。
2. Bean加載順序控制
- @Order 注解限制:不直接影響Bean創建和初始化過程,由Spring IoC容器基于依賴關系和配置決定。
3. 設置Bean加載順序的方法
-
@DependsOn 注解
- 指示Spring容器在初始化一個Bean前,先初始化其依賴的其他Bean。
- 解決Bean間依賴關系,確保依賴Bean準備就緒。
- 可應用于配置類、服務類、數據訪問對象等。
-
BeanFactoryPostProcessor
- 執行時機早于正常Bean初始化。
- 可用于提前初始化特定Bean。
- 在
postProcessBeanFactory
方法中手動調用getBean
實現。
4. 小結
- 確保多個相同類型Bean執行順序:使用
@Order
注解或Ordered
接口。 - 調整Bean加載順序:
- 通過
@DependsOn
注解加載。 - 在
BeanFactoryPostProcessor#postProcessBeanFactory
中提前調用getBean
方法初始化Bean。
- 通過