天天看点

@Resource和@Autowired的区别及补充

参考博文:

<博文链接:https://www.cnblogs.com/fengli9998/p/7472247.html>

这里面已经已经写的很清楚了。

然后我补充下自己的。

当一个接口有多个实现类的时候,那么注入的时候它会选择某一个类来注入吗?

答案肯定是不可能的,这时候我们应该如何解决呢。

  1. 首先,当我们使用@Autowired注解来注入的时候,它是默认按照类型来注入的,然而这个接口却有两个实现类,它并不知道选择哪一个类型,所以我们需要结合@Qualifier按照名称来完成注入,而@Qualifier中value属性值就是实现类的名称。当然除了这种方法,我们也可以在某一个实现类上加入@Primary注解,来表示哪一个实现类被注入的时候优先注入。
  2. 当我们使用@Resource注解来注入时,@Resource它是默认按照名称来注入的(当我们既没有指定按名称注入或者指定按类型注入的时候)。这时候该如何解决注入呢?我们仍然可以使用这个注解,不过就要指定按照名称或者类型来注入了。

    (1)按照名称来注入,需要指定@Resource的name属性,属性值是其中某一个实现类的名称.ex:@Resource(name=“HelloServiceImpl”)

    (2)按照类型来注入,需要指定@Resource的type属性,属性值是其中某一个实现类的字节码文件,ex:@Resource(type=HelloServiceImpl.class)