Spring @Primary、@Order、JSR @Priority作用与区别

前言

@Primary、@Order、@Priority三个注解很常见,关于它们的异同,这里做个总结。

@Primary、@Order、@Priority

  • @Primary
    • Spring @Primary控制注入优先级。
  • @Order
    • Spring @Order控制注入到List中的排序,值越小优先级越高,不能是负数,负数预留用作特殊含义比如未指定。
  • @Priority
    • JSR @Priority既能控制List中的排序又能控制注入优先级;值越小优先级越高,不能是负数,负数预留用作特殊含义比如未指定;如果一个类实现了Order接口且既有@Priority又有@Order,优先级:Order接口>@Order>@Priority;
      当注入bean有多个候选者,有的候选者用@Priority,有的用@Primary,优先级:@Primary>@Priority;

总结

  • 有控制注入优先级的,有控制注入后的顺序的,还有两者兼有的;
  • spring的注解优先级高于JSR注解;接口高于注解;

参考源码

实现原理,可参考以下几个类。

  • org.springframework.core.annotation.OrderUtils#getOrder(java.lang.Class<?>)
  • org.springframework.beans.factory.support.DefaultListableBeanFactory#determineAutowireCandidate
相关推荐
wasp5201 天前
做了技术管理后,我发现技术和管理其实可以兼得
java·运维·网络
MarkHD1 天前
车辆TBOX科普 第45次
java·开发语言
okseekw1 天前
字面量的初步认识
java
q***42821 天前
SpringBoot Maven快速上手
spring boot·后端·maven
Victor3561 天前
Redis(153)Redis的网络使用如何监控?
后端
码一行1 天前
Eino AI 实战:解析 PDF 文件 & 实现 MCP Server
后端·go
Victor3561 天前
Redis(152) Redis的CPU使用如何监控?
后端
P***84391 天前
解决Spring Boot中Druid连接池“discard long time none received connection“警告
spring boot·后端·oracle
雨中散步撒哈拉1 天前
17、做中学 | 初三下期 Golang文件操作
开发语言·后端·golang
倚肆1 天前
Spring Boot CORS 配置详解:CorsConfigurationSource 全面指南
java·spring boot·后端