美文网首页
Spring学习笔记(七) Resource注解

Spring学习笔记(七) Resource注解

作者: 云师兄 | 来源:发表于2019-12-23 14:17 被阅读0次

    1. 引子

    ​ 平时依赖注入用的最多的是Autowired注解,实际上除了可以使用Spring提供的@Autowired和@Qualifier来标注相应类定义之外,还可以使用Jdk自带的@Resource和@PostConstruct以及@PreDestroy对相应类进行标注,这同样可以达到依赖注入的目的。 @Resource与@Autowired不同,它遵循的是byName自动绑定形式的行为准则,也就是说,IoC容器将根据@Resource所指定的名称,到容器中查找beanName与之对应的实例,然后将查找到的对象实例注入给@Resource所标注的对象。 下面通过示例来了解一下。

    2. 示例

    首先定义一个Car接口:

    public interface Car {
        public String print();
    }
    

    然后基于这个接口定义两个实现类:

    @Component
    public class Audi implements Car {
        @Override
        public String print(){
            return "audi";
        }
    }
    

    写好之后,我们可以使用Autowired注解来注入这个car:

    @RestController
    public class TestController {
      @Autowired
      private Car car;
      
      ...
    }
    

    但是如果该接口有两个实现类呢,下面再加一个奔驰:

    @Component
    public class Benz implements Car {
        @Override
        public String print(){
            return "benz";
        }
    }
    

    这时注入就会报错了,原因在Qualifier注解那篇文章中已经提到了,我们可以使用Qualifier注解来指定使用哪一个实现类。本文用到了另一个Resource注解,也可以解决这个问题:

    @RestController
    public class TestController {
      
      @Resource(name="audi")
      private Car car;
      
      ...
    }
    

    使用该注解的时候,可以通过参数name来指定注入哪一个实现类。如果没有指定name的值,那么和只使用Autowired注解的效果是一样的。

    总的来说,这个Jdk提供的Resouce注解和Spring提供的Autowired+Qualifier注解效果差不多。

    相关文章

      网友评论

          本文标题:Spring学习笔记(七) Resource注解

          本文链接:https://www.haomeiwen.com/subject/uqvznctx.html