当前位置: 首页 > 后端技术 > Java

【Java访谈】@Resource和@Autowired的区别

时间:2023-04-01 20:07:40 Java

大家好,我是Mic。一个工作2年的粉丝问我一个关于Spring的问题。希望能换个角度分析,碾压面试官。本题是:“@Resource和@Autowired”的区别。我们来看看普通人和专家的回答。普通人:我觉得@Resource和@Autowired的区别在于他们的一种注入方式。@Resource是根据名字注入的,@Autowired是根据类型注入的。.师父:好的,面试官。@Resource和@Autowired这两个注解用于实现Spring生态中的Bean依赖注入。下面分别说一下@Autowired和@Resource这两个注解。闪现【@Autowired的功能详解】几句话。首先,@Autowired是Spring提供的注解,默认是根据类型实现Bean依赖注入。@Autowired注释中有一个必需的属性。默认值为true,这意味着bean实例的注入是强制性的。当应用程序启动时,如果IOC容器中没有对应类型的bean,就会报错。当然,如果你不想自动注入,可以将这个属性设置为false。其次,如果SpringIOC容器中有多个同类型的Bean实例。由于@Autowired注解是根据类型注入Bean实例的,所以在Spring启动的时候会提示错误,大概意思是只能注入一个单实例bean,但是在IOC容器中却不止一个,导致注入失败。当然,我们可以使用@Primary或??者@Qualifier注解来解决这个问题。@Primary代表主bean。当有多个相同类型的bean时,首先使用声明了@Primary的bean。@Qualifier的作用类似于条件筛选,可以根据Bean的名字找到需要组装的目标Bean。Flash[@Resource的角色详细]几句话。接下来,我来解释一下@Resource注解。@Resource是JDK提供的一个注解,但是Spring在实现上为这个注解提供了功能支持。它的使用和@Autowired完全一样,(如图)最大的区别是@Resource可以同时支持ByName和ByType两种注入方式。如果使用name,Spring会根据bean的名字进行依赖注入。如果使用类型,Spring会根据类型实现依赖注入。如果两个属性都没有配置,则先根据定义的属性名进行匹配,如果匹配不成功,则根据类型进行匹配。如果两者都不匹配,则会报错。最后再总结一下。@Autowired根据类型匹配,@Resource可以根据名称和类型进行匹配,默认是名称匹配。@Autowired是Spring定义的注解,@Resource是JSR250规范定义的注解,Spring提供了对JSR250规范的支持。如果@Autowired需要支持名称匹配,则需要使用@Primary或@Qualifier来实现。以上是我对这个问题的理解。综上,大家可以关注专家部分的回答,他的逻辑结构非常清晰。他很直观的告诉面试官这两个注解的区别,同时根据两个注解的特点解释更多的不同点。最后,做一个简短的总结。面试时可以参考类似的答题思路。喜欢我作品的朋友记得点赞收藏关注。版权声明:除特别声明外,本博客所有文章均采用CCBY-NC-SA4.0许可协议。转载请注明来自Mic带你学建筑!如果本文对您有帮助,请给个关注和点赞。您的坚持是我不断创作的动力。欢迎关注同名微信公众号获取更多技术干货!