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。
相关推荐
陈随易8 小时前
在 VSCode 里,把项目一键部署到服务器
前端·后端·程序员
鱼樱前端8 小时前
我用 Claude Code 后,编码效率翻 3 倍。但更值钱的是别的。
前端·后端·ai编程
犀利豆9 小时前
Claude code tools 研究系列-开篇(AskUserQuestion)
后端
头发还在的女程序员9 小时前
医院陪诊管理系统怎么选择?——2026 年选型避坑与架构参考
java·开发语言·陪诊系统·陪诊app·医院陪诊陪护
CodeStats10 小时前
【Spring事务】Spring事务注解 @Transactional 完整体系:从 MySQL 隔离级别到 MyBatis 原理详解
java·spring·mybatis·事务·transactional
我命由我1234510 小时前
Android 开发问题:为 PDFView 设置一个带有黑色边框的背景 drawable,但边框没有生效
android·java·java-ee·android studio·android jetpack·android-studio·android runtime
颜酱12 小时前
06 | 把 meta_config 同步进 MySQL(生成阶段)
前端·人工智能·后端
都叫我大帅哥12 小时前
从Python到Java:为什么企业级Agent最终会选择Java?
java·ai编程
wanderist.13 小时前
Lambda表达式在算法竞赛中的应用
java·开发语言·算法
IT_陈寒13 小时前
SpringBoot自动配置坑了我一周,原来问题这么蠢!
前端·人工智能·后端