Hi,大家好,我是Mic。
一个工作2年的粉丝,问我一个Spring外面的问题。
心愿我能从不同的视角去剖析,而后碾压面试官。
这个问题是: “@Resource和@Autowired”的区别。
上面看看普通人和高手的答复
普通人:
@Resource和@Autowired的区别我认为是在它们的一个注入的一个形式上
@Resource它是依据name来进行注入的,@Autowired是依据类型来注入的。
高手:
好的,面试官。
@Resource和@Autowired这两个注解的作用都是在Spring生态外面去实现Bean的依赖注入。
上面我别离说一下@Autowired和@Resource这两个注解。
闪现 [@Autowired的作用详解 ] 几个字。
首先,@Autowired是Spring外面提供的一个注解,默认是依据类型来实现Bean的依赖注入。
@Autowired注解外面有一个required
属性默认值是true,示意强制要求bean实例的注入,
在利用启动的时候,如果IOC容器外面不存在对应类型的Bean,就会报错。
当然,如果不心愿主动注入,能够把这个属性设置成false。
其次呢, 如果在Spring IOC容器外面存在多个雷同类型的Bean实例。因为@Autowired注解是依据类型来注入Bean实例的
所以Spring启动的时候,会提醒一个谬误,大略意思本来只能注入一个单实例Bean,
然而在IOC容器外面却发现有多个,导致注入失败。
当然,针对这个问题,咱们能够应用 @Primary或者@Qualifier这两个注解来解决。
@Primary示意次要的bean,当存在多个雷同类型的Bean的时候,优先应用申明了@Primary的Bean。
@Qualifier的作用相似于条件筛选,它能够依据Bean的名字找到须要拆卸的指标Bean。
闪现 [@Resource的作用详解 ] 几个字。
接下来,我再解释一下@Resource注解。
@Resource是JDK提供的注解,只是Spring在实现上提供了这个注解的性能反对。
它的应用形式和@Autowired完全相同,(如图)最大的差别于@Resource能够反对ByName和ByType两种注入形式。
如果应用name,Spring就依据bean的名字进行依赖注入,如果应用type,Spring就依据类型实现依赖注入。
如果两个属性都没配置,就先依据定义的属性名字去匹配,如果没匹配胜利,再依据类型匹配。两个都没匹配到,就报错。
最初,我再总结一下。
- @Autowired是依据type来匹配,@Resource能够依据name和type来匹配,默认是name匹配。
- @Autowired是Spring定义的注解,@Resource是JSR 250标准外面定义的注解,而Spring对JSR 250标准提供了反对。
- @Autowired如果须要反对name匹配,就须要配合@Primary或者@Qualifier来实现。
以上就是我对这个问题的了解。
总结
大家能够关注高手局部的答复,他的逻辑构造很清晰的。
他是十分直观的通知面试官这两个注解的差别,同时又基于两个注解的个性解释了更多的差别。
最初做了一个简短的总结。
大家在面试的时候能够参考相似的答复思路。
喜爱我的作品的小伙伴记得点赞和珍藏加关注。
版权申明:本博客所有文章除特地申明外,均采纳 CC BY-NC-SA 4.0 许可协定。转载请注明来自Mic带你学架构
!
如果本篇文章对您有帮忙,还请帮忙点个关注和赞,您的保持是我一直创作的能源。欢送关注同名微信公众号获取更多技术干货!