戴着假发的程序员出品 抖音ID:戴着假发的程序员 欢迎关注
spring应用手册(第二部分)
@Resource是 JSR-250标准。可以注解在bean的成员变量或者setter方法上。主要也是用于通知spring当前的属性应该注入哪个bean。@Resource和@Autowired不同的是@Resource会首先按照名称注入,如果名称找不到才会按照类型注入。
我们可以通过@Resource的属性name指定要注入的bean的beanName,当然如果不指定name属性的话spring或自动根据属性或者setter方法找到对应的beanName例如:
/** * @author 戴着假发的程序员 * * @description */ @Component public class ArticleService { @Resource private IArticleDAO articleDAO; //... }上面的程序中spring生成的beanName默认是"artilceDAO"。
/** * @author 戴着假发的程序员 * * @description */ @Component public class ArticleService { private IArticleDAO articleDAO; @Resource public void setAuthorDAO(IArticleDAO articleDAO){ this.articleDAO = articleDAO; } //... }上面的程序中spring生成的beanName默认是"authorDAO"。
当然我们可以指定名称:
/** * @author 戴着假发的程序员 * * @description */ @Component public class ArticleService { @Resource(name="articleDAO_oracle") private IArticleDAO articleDAO; //... }这是spring就会查找beanName为articleDAO_oracle的bean注入。
几个要注意的问题:
[1]@Resource默认会按照名称查找容器中的bean,如果名称找不到就会按照类型查找,如果这时同种类型的bean在容器中出现多个,一样会抛出异常。
[2]如果我们显式的指定了@Resource的name属性,那么spring如果通过这个名字找不到对应的bean就会报错,不会再按照类型查找。