j记得之前有道面试题问的这个,当时不清楚,现在稍微学了下spring底层,然后做一个记录吧。
共同点:
两者都可以进行依赖注入,而且效率上也都不多,并没有优劣之分吧
不同点:
1.@Resource是Java提供的注解但spring支持这个注解,@Autowired是spring提供的注解
2.
@Autowried只有一个属性,requried,是否是必须的,默认是true,为true的情况下找不到这个注入的bean会报错。进行依赖注入的时候@Autowired是先根据类型(ByType)在spring容器中查找bean,找到多个的话再根据名字(ByName)进行查找。
这里想直接注入指定Bean名称的话,需要配合使用@Qualifier注解
如果一个类型有多个bean的话,也可以通过@Primary注解注入加了该注解的bean,或者通过@Priority注解来设置优先级,选优先级最高的进行注入。
可以看出@Resource注解中有一个name和type的属性,可以指定注入对象的名称和类型。如果这里指定了名称,则只会根据名称去找bean,找不到的是会报错的。如果没有指定,则跟上面的一致,先根据类型(ByType)在spring容器中查找bean,找到多个的话再根据名字(ByName)进行查找。