`@Resource` 和 `@Autowired`注解傻傻分不清
`@Resource` 和 `@Autowired` 是 Spring 框架中用于依赖注入的注解。它们的主要区别在于如何解析和匹配被注入的对象。
### `@Autowired` 注解
`@Autowired` 注解默认通过类型(By Type)来查找并注入 Bean。如果存在多个相同类型的 Bean,则可以通过指定名称或使用 `Qualifier` 来进一步限定。
**示例:**
```java
@Autowired
private SomeService someService; // 根据类型自动注入 SomeService 类型的 Bean。
@Autowired
private AnotherService anotherService; // 如果有多个 AnotherService 类型的 Bean,则会抛出异常。
@Autowired
private SpecificService specificService; // 如果有多个 SpecificService 类型的 Bean,可以使用 Qualifier 进一步限定。
```
### `@Resource` 注解
`@Resource` 注解默认通过名称(By Name)来查找并注入 Bean。如果没有指定名称,则默认为字段名。如果找不到同名的 Bean,则尝试按类型匹配。
**示例:**
```java
@Resource(name="someServiceImpl")
private SomeService someService; // 根据名称 "someServiceImpl" 查找并注入 Bean。
@Resource
private AnotherService anotherService; // 默认根据字段名 "anotherService" 查找并注入 Bean。
@Resource
private SpecificService specificService; // 如果没有名为 "specificService" 的 Bean,则尝试按类型匹配。
```
### 总结
- **`@Autowired`**: 主要通过类型匹配,默认情况下不需要指定名称。
- **`@Resource`**: 主要通过名称匹配,也可以通过类型匹配,但优先级低于名称匹配。
在实际应用中,可以根据具体需求选择合适的注解。如果希望更灵活地控制注入方式,通常推荐使用 `@Autowired` 结合 `@Qualifier`。
浙公网安备 33010602011771号