2.20 @Resource注解

戴着假发的程序员出品  抖音ID:戴着假发的程序员  欢迎关注

[查看视频教程]

@Resource是 JSR-250标准。可以注解在bean的成员变量或者setter方法上。主要也是用于通知spring当前的属性应该注入哪个bean。

@Resource和@Autowired不同的是@Resource会首先按照名称注入,如果名称找不到才会按照类型注入。

我们可以通过@Resource的属性name指定要注入的bean的beanName,当然如果不指定name属性的话spring或自动根据属性或者setter方法找到对应的beanName例如:

 1 /**
 2  * @author 戴着假发的程序员
 3  *  
 4  * @description
 5  */
 6 @Component
 7 public class ArticleService {
 8     @Resource  
 9     private IArticleDAO articleDAO;
10     //...
11

上面的程序中spring生成的beanName默认是"artilceDAO"。

 1 /**
 2  * @author 戴着假发的程序员
 3  *  
 4  * @description
 5  */
 6 @Component
 7 public class ArticleService {
 8     private IArticleDAO articleDAO;
 9     @Resource
10     public void setAuthorDAO(IArticleDAO articleDAO){
11         this.articleDAO = articleDAO;
12     }
13     //...
14

上面的程序中spring生成的beanName默认是"authorDAO"。

当然我们可以指定名称:

 1 /**
 2  * @author 戴着假发的程序员
 3  *  
 4  * @description
 5  */
 6 @Component
 7 public class ArticleService {
 8     @Resource(name="articleDAO_oracle")
 9     private IArticleDAO articleDAO;
10     //...
11 }

这是spring就会查找beanName为articleDAO_oracle的bean注入。

几个要注意的问题:

[1]@Resource默认会按照名称查找容器中的bean,如果名称找不到就会按照类型查找,如果这时同种类型的bean在容器中出现多个,一样会抛出异常。

[2]如果我们显式的指定了@Resource的name属性,那么spring如果通过这个名字找不到对应的bean就会报错,不会再按照类型查找。

posted @ 2020-10-10 08:29  戴着假发的程序员0-1  阅读(194)  评论(0编辑  收藏  举报