相同点
注解到字段上或者方法上来实现自动装配
不同点
1、@Autowired是由spring提供的,@Resource是java语言提供的,使用该注解能实现对spring的解耦(不过现在都是spring的天下,意义不大)
2、查找bean的方式不同
@Autowired:首先通过类型来查找bean,如果自找到一个,则直接注入,如果没有找到,则抛出异常,如果找到多个bean也会抛出异常,解决方法一:可以在配置bean的时候加上@Primary注解,来提高优先级,这样就不会报错,解决方法二:会默认使用字段名来匹配,如果没有匹配上,抛出异常。如果需要直接通过bean的id来查找,可以配合@Qualifier来使用,没有找到抛出异常。
PS:这里重点需要指出,使用@Autowired 是有优先级的,@Qualifier > 按类型找(如果找到多个继续使用之后的策略) > @Primary > 按名字找
@Resource: 如果注解中设置了name属性,直接通过id去查找,如果没有,抛出异常;如果注解中没有设置name属性,默认先通过字段名(或参数名)去查找,没有找到,再通过类型去查找,如果查找到0个或多个,抛出异常,注意:这里不支持使用@Primary来解决一个类型查找到多个bean的情况。
3、@Autowired通过设置required=false,在没有找到bean的情况下,不会抛出异常
综上,@Autowired功能更多,推荐使用