Spring Boot 基于注解的依赖查找本质是声明式自动装配,前提是 Bean 已注册到 IoC 容器;常用方式包括@Component系注解扫描、@Bean定义、@Import导入;@Autowired按类型匹配,默认要求唯一,多实例时需@Qualifier指定名称,或用@Primary/@Profile等控制优先级。

Spring Boot 中基于注解的依赖查找,核心是让 Bean 被 Spring 容器管理(注册),再通过标准注解完成按类型或名称的自动装配。它不是“手动查”,而是“声明式查找”——你写好注解,Spring 在启动时自动完成匹配和注入。
确保 Bean 能被容器发现
依赖查找的前提是目标 Bean 已存在于 IoC 容器中。常见注册方式有三种:
- @Component 及其衍生类(@Service、@Repository、@Controller):放在类上,配合 @ComponentScan 扫描路径(默认扫描启动类所在包及子包)
- @Bean + @Configuration:在配置类中用方法定义 Bean,返回实例,方法名默认为 beanName
- @Import:直接导入第三方类或配置类,哪怕它们没加任何组件注解,也能进容器
用 @Autowired 按类型查找
这是最常用的方式,默认根据字段/参数的类型去容器中匹配唯一 Bean:
当用户要求为 Java 代码添加注释、修改注释、审查注释、整理注释格式,或要求按照代码注释规范处理 Java 文件时,使用本技能。本技能用于统一生成和维护 Java 类注释模板、按 Git 对比 release 判断版本号、补充每行代码上方中文块注释、调整注释空行规则,并保持 Java 文件 UTF-8 无 BOM 编码。典型触发场景包括:补充类注释、更新 @version、检查 @author 来源、整理行尾注释、把注释放到代码上一行、检查注释是否符合规范、构建前检查 Java 注释风格。
- 若找到 0 个,抛出
NoUniqueBeanDefinitionException(除非标注@Autowired(required = false)) - 若找到多个同类型 Bean,会报错;此时需配合 @Qualifier("beanName") 指定名称
- 支持字段、构造器、setter 方法三种注入点,推荐构造器注入(不可变、易测试)
用 @Qualifier 配合名称查找
当类型不唯一时,靠名字精准定位:
- Bean 名称默认是类名首字母小写(
UserServiceImpl → userServiceImpl) - 也可用 @Component("userSvc") 或 @Bean("userSvc") 显式指定
- 注入时写
@Autowired @Qualifier("userSvc") UserService service;
用 @Primary 或 @Profile 控制候选优先级
解决多实现冲突的补充策略:
-
@Primary 标在某个
@Bean或@Component类上,表示该类型下它是首选 Bean - @Profile("dev") 让 Bean 只在特定环境生效,间接缩小查找范围(如开发环境用 MockService,生产用 RealService)
- 还可结合 @ConditionalOnBean 等条件注解,实现“有 A 才加载 B”,让查找逻辑更健壮










