Spring如何控制Bean加载+执行顺序

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。
相关推荐
盖世英雄酱5813621 小时前
Java 组长年终总结:靠 AI 提效 50%,25 年搞副业只赚 4k?
后端·程序员·trae
毕设源码-赖学姐21 小时前
【开题答辩全过程】以 高校人才培养方案管理系统的设计与实现为例,包含答辩的问题和答案
java
+VX:Fegn08951 天前
计算机毕业设计|基于springboot + vue在线音乐播放系统(源码+数据库+文档)
数据库·vue.js·spring boot·后端·课程设计
一起努力啊~1 天前
算法刷题-二分查找
java·数据结构·算法
小途软件1 天前
高校宿舍访客预约管理平台开发
java·人工智能·pytorch·python·深度学习·语言模型
J_liaty1 天前
Java版本演进:从JDK 8到JDK 21的特性革命与对比分析
java·开发语言·jdk
code bean1 天前
Flask图片服务在不同网络接口下的路径解析问题及解决方案
后端·python·flask
+VX:Fegn08951 天前
计算机毕业设计|基于springboot + vue律师咨询系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端·课程设计
努力的小郑1 天前
2025年度总结:当我在 Cursor 里敲下 Tab 的那一刻,我知道时代变了
前端·后端·ai编程
daidaidaiyu1 天前
一文学习和实践 当下互联网安全的基石 - TLS 和 SSL
java·netty