- 相同点
- 对于下面的代码来说,如果是Spring容器的话,两个注解的功能基本是等价的,他们都可以将bean注入到对应的field中
- 不同点
- 但是请注意,这里说的是基本相同,说明还是有一些不同点的:
- byName和byType匹配顺序不同
- 1. Autowired在获取bean的时候,先是byType的方式,再是byName的方式
- 意思就是先在Spring容器中找以Bean为类型的Bean实例,如果找不到或者找到多个bean,则会通过fieldName来找
- 举个例子:
- 当多个类型匹配时,可以使用@Qualifier 注解来指定具体的bean名称
- 2. Resource在获取bean的时候,和Autowired恰好相反,先是byName方式,然后再是byType方式
- 当然,我们也可以通过注解中的参数显示指定通过哪种方式
- 同样举个例子:
- 它更加灵活,既可以根据类型进行注入,也可以根据名称进行注入;通过name属性可以显式指定需要注入的bean的名称
- 总的来说,@Autowired 注解更加简洁易用,适用于大多数情况下的依赖注入;而@Resource 注解更加灵活,可以根据不同的需求进行注入
- 作用域不同
- 1. Autowired可以作用在构造器,字段,setter方法上
- 2. Resource只可以使用在field,setter方法上
- 支持方不同
- 1. Autowired是Spring提供的自动注入注解,只有Spring容器会支持,如果做容器迁移,是需要修改代码的
- 2. Resource是JDK官方提供的自动注入注解(JSR-250);它等于说是一个标准或者约定,所有的IOC容器都会支持这个注解;假如系统容器从Spring迁移到其他IOC容器中,是不需要修改代码的
- byName和byType匹配顺序不同