Skip to content

Commit 76176dc

Browse files
committed
Update spring-knowledge-and-questions-summary.md
1 parent 28cb0b8 commit 76176dc

File tree

1 file changed

+9
-1
lines changed

1 file changed

+9
-1
lines changed

docs/system-design/framework/spring/spring-knowledge-and-questions-summary.md

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -265,7 +265,15 @@ private SmsService smsService;
265265

266266
实际开发实践中,我们还是建议通过 `@Qualifier` 注解来显式指定名称而不是依赖变量的名称。
267267

268-
`@Resource`属于 JDK 提供的注解,默认注入逻辑为**先按名称(byName)** 匹配,若找不到则尝试**按类型(byType)筛选**,按**类型(byType)** 筛选到0个或多个bean都会抛出异常,只有在只筛选到一个bean时注入。
268+
`@Resource` 源自 **JSR-250** 规范(标准 Java 规范),在 JDK 6 到 JDK 10 中,它确实存在于 JDK 提供的包中。不过,从 JDK 11 开始,它不再默认存在于 JDK 内部,你需要引入额外的依赖 `javax.annotation-api`才能使用。
269+
270+
Spring 对 `@Resource`(无参数情况)的处理逻辑如下:
271+
272+
1. **按名称(byName)匹配:**默认取字段名(Field Name)作为 bean 的名称去容器中查找。如果找到了该名称的 Bean,则直接注入。
273+
2. **回退到按类型(byType)匹配:**如果**没有**找到同名的 Bean,Spring 会退而求其次,尝试根据字段的**类型**去查找。**按类型匹配的结果判定**
274+
- **找到 1 个 Bean**:注入成功。
275+
- **找到 0 个 Bean**:抛出异常 (`NoSuchBeanDefinitionException`)。
276+
- **找到 >1 个 Bean**:抛出异常 (`NoUniqueBeanDefinitionException`)。
269277

270278
`@Resource` 有两个比较重要且日常开发常用的属性:`name`(名称)、`type`(类型)。
271279

0 commit comments

Comments
 (0)