关于java:Java面试Resource-和-Autowired-的区别

26次阅读

共计 1468 个字符,预计需要花费 4 分钟才能阅读完成。

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 带你学架构
如果本篇文章对您有帮忙,还请帮忙点个关注和赞,您的保持是我一直创作的能源。欢送关注同名微信公众号获取更多技术干货!

正文完
 0