Spring学习笔记(七) Resource注解

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注解)