`@Autowired` 和 `@Resource` 都是 Spring 中用于进行依赖注入的注解,它们的主要区别如下:
1. 来源不同
`@Autowired` 是 Spring 提供的注解,而 `@Resource` 是 JavaEE 提供的注解,需要导入 `javax.annotation.Resource` 包。
2. 注入方式不同
`@Autowired` 可以按照类型进行注入,也可以按照名称进行注入。如果按照名称进行注入,可以结合 `@Qualifier` 注解一起使用。
```java
@Autowired
private UserService userService;
@Autowired
@Qualifier("userServiceImpl")
private UserService userService;
```
`@Resource` 只能按照名称进行注入,不能按照类型进行注入。如果没有指定名称,则默认按照属性名进行匹配。
```java
@Resource
private UserService userService;
@Resource(name = "userServiceImpl")
private UserService userService;
```
3. 兼容性不同
`@Autowired` 是 Spring 提供的注解,只能在 Spring 环境中使用。
`@Resource` 是 JavaEE 提供的注解,可以在任何支持 JavaEE 规范的环境中使用。
4. 属性不同
`@Autowired` 注解的属性比较多,包括 `required`、`autowire`、`qualifier` 等。
`@Resource` 注解的属性比较少,只有 `name` 和 `type` 两个属性。
综上所述,`@Autowired` 和 `@Resource` 在注入方式、兼容性和属性等方面存在一些差异,开发者可以根据实际情况选择使用。