@Autowired 与 @Resource 区别

@Autowired 与 @Resource 区别
两者的共同点:都是用来装配Bean的注解。都可以写在字段上,或写在setter方法上。

区别:
1.@Autowired注解是spring提供的注解,是按照类型(byType)装配依赖对象,默认情况下它所要求依赖对象必须存在,如果你允许null值,可以设置它的required属性为false。

在这里有个点要注意,假设我们在controller中注入的只是一个接口,但是当我们调用接口的方法seckillService.getSeckillList()时,spring会帮我们自动装载注册在spring容器中的seckillService的接口实现类,即当我们调用接口的方法时真正调用的也是接口实现类的方法。
另外,当我们需要按照名称(byName)来装配时,可以结合@Qualifier注解一起使用。
eg:@Autowired @Qualifier("seckillService")

2.@Resource是 J2EE 提供的注解。Resource有两个属性,name和type,resource会把name作为bean的名称,type作为bean的类型。因为其有两个属性所以装载bean时就分为好几种情况了。

  • 如果同时指定了name和type,则从Spring上下文中找到唯一匹配的bean进行装配,找不到则抛出异常;
  • .如果指定了name,则根据注册在spring容器bean 的id进行装配,找不到则抛出异常;
  • .如果指定了type,则从上下文中找到类型匹配的唯一bean进行装配,找不到或者找到多个,都会抛出异常;
  • .如果既没有指定name,又没有指定type,则自动按照byName方式进行装配;

推荐使用@Resource,减少与spring的耦合

你可能感兴趣的:(@Autowired 与 @Resource 区别)