spring boot 整合activity 报错org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'org.activiti.engine.TaskService' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
错误注入方式
@Autowired
private TaskService taskService; // 任务管理
正确注入方式
@Qualifier("taskService")
private TaskService taskService;
核心区别概览
| 维度 | @Autowired | @Qualifier |
|---|---|---|
| 来源 | Spring 特有 | Spring 特有(配合自动装配使用) |
| 默认装配策略 | 按类型(ByType);若同类型有多个候选,再结合名称或使用其他策略 | 不单独装配;与 |
| 是否可单独使用 | 可单独用于字段、构造器、方法、参数 | 通常不可单独使用;在字段/方法/参数上需与 |
| 多候选 Bean 时 | 可能抛出 NoUniqueBeanDefinitionException;可用 | 显式指定要注入的 Bean 名称/限定符,优先级高 |
| 可选依赖 | 支持 | 不具备 |
| 常见搭配 |
|
|
上述规则是 Spring 自动装配的基础机制:@Autowired负责“按类型找候选”,@Qualifier负责“按名称/限定符精确指定”
工作机制与优先级
- •
按类型匹配:
@Autowired先按类型在容器中查找候选 Bean。-
若存在 @Primary 标记的 Bean,优先注入;
-
若同时存在
@Qualifier,则以@Qualifier指定的名称/限定符为准进行精确匹配(优先级高于@Primary);. -
若仍未唯一,再尝试按名称或报错。•
-
结论:
@Qualifier用于“显式指定”,@Primary用于“设定默认”。两者并存时,以@Qualifier为准
-
-
歧义消解顺序:
解决TaskService无法注入问题

1630

被折叠的 条评论
为什么被折叠?



