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试试就完全清楚明了了。