Autowired 和 Resource 的区别
@Autowired和@Resource都是用于依赖注入的注解,用于将其他组件或资源自动注入到目标对象中。比如说:
@Autowired
private bean A;
@Resource
private Bean B;
但是它们在使用方式和功能上有一些区别:
- @Autowired:在获取 Bean 时,先通过类型进行匹配,在根据名称进行匹配。示例如下:
@Component
class ABean implements Bean {}
@Component
class BBean implements Bean {}
@Service
class Test {
//自动装配失败,按照类型找到两个 Bean:ABean 与 BBean,在根据名称 bean 未找到目标Bean, 装配失败。
@Autowired
private Bean bean;
//自动装配成功,按照类型找到两个 Bean:ABean 与 BBean,在根据名称 ABean 找到目标Bean,装配成功。
@Autowired
@Qualifier("ABean")
private Bean bean;
//自动装配成功,按照类型找到两个 Bean:ABean 与 BBean,在根据名称 BBean 找到目标Bean,装配成功。
@Autowired
private Bean BBean;
}
- 是Spring框架的注解,基于类型进行依赖注入。
- 支持通过@Qualifier注解指定具体的Bean名称进行注入。
- 可以用于构造器、字段、方法或者参数上。
- @Resource:在获取 Bean 时,先通过名称进行匹配,在根据类型进行匹配。示例如下:
@Component
class ABean implements Bean {}
@Component
class BBean implements Bean {}
@Service
class Test {
//自动装配失败,按照名称未找到目标Bean,在根据类型找到两个 Bean:ABean 与 BBean ,装配失败。
@Resource
private Bean bean;
//自动装配成功,按照名称找到目标Bean,装配成功。
@Resource(name = "ABean")
private Bean bean;
//自动装配成功,按照名称找到目标Bean,装配成功。
@Resource
private Bean BBean;
}
- 是Java EE规范中定义的注解,在Java 6及以上版本中可用。
- 默认按照属性名称进行查找,也可以通过name属性指定具体的Bean名称进行注入。
- 只能用于字段、setter方法或者参数上。