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。
- 通过