spring注解@Autowired、@Qualifier、@Resource区别

参考:

https://www.cnblogs.com/think-in-java/p/5474740.html
https://www.w3cschool.cn/wkspring/43851h9t.html

之前真的只会用Autowired注解,其他两个从来没有用过,只是在面试的经常被问及。

@Autowired和@Qualifier属于spring注解,而@Resource属于 JSR-250注释,因为spring内部支持JSR, 因此spring也支持@Resource注解。

其中工作里经常用@Autowired,@Qualifier偶尔需要用,@Resource基本不用。

我们知道spring的自动装配可以通过byType和byName的, @Autowired是按照byType来匹配的.

当一个类有多个定义的时候(比如在最最最原始的xml中),如果我们通过@Autowired来装配的话,spring就不知道用那个类来装配,从而报:

Caused by: org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type ......

那么我们这个时候就可以通过@Qualifier来指定具体使用哪一个,从而解决bug。

而再说说@Resource注解,他有如下属性

它可以通过name属性来进行装配(bean里面的id或者name)或者通过type(类型)来进行装配。

如果@Resource既没有写name也没有写type,经测试先会进行name装配,如果name装配没有找到就会进行type装配。

文字的感情不够,还是自己写个简单的demo试试就完全清楚明了了。

posted @ 2020-07-25 17:27  杀出重围啊  阅读(450)  评论(0编辑  收藏  举报