Redian新闻
>
为什么 Spring 和 IDEA 都不推荐使用 @Autowired 注解

为什么 Spring 和 IDEA 都不推荐使用 @Autowired 注解

公众号新闻

↓推荐关注↓

作者:小亮哥Ya

juejin.cn/post/7080441168462348319

前言

大家在使用IDEA开发的时候有没有注意到过一个提示,在字段上使用Spring的依赖注入注解@Autowired后会出现如下警告

Field injection is not recommended (字段注入是不被推荐的)

但是使用@Resource却不会出现此提示 网上文章大部分都是介绍两者的区别,没有提到为什么,当时想了好久想出了可能的原因,今天来总结一下

Spring常见的DI方式

  • 构造器注入:利用构造方法的参数注入依赖
  • Setter注入:调用Setter的方法注入依赖
  • 字段注入:在字段上使用@Autowired/Resource注解

@Autowired VS @Resource

事实上,他们的基本功能都是通过注解实现依赖注入,只不过@Autowired是Spring定义的,而@Resource是JSR-250定义的。大致功能基本相同,但是还有一些细节不同:

  • 依赖识别方式:@Autowired默认是byType可以使用@Qualifier指定Name,@Resource默认ByName如果找不到则ByType
  • 适用对象:@Autowired可以对构造器、方法、参数、字段使用,@Resource只能对方法、字段使用
  • 提供方:@Autowired是Spring提供的,@Resource是JSR-250提供的

各种DI方式的优缺点

参考Spring官方文档,建议了如下的使用场景:

  • 构造器注入:强依赖性(即必须使用此依赖),不变性(各依赖不会经常变动)
  • Setter注入:可选(没有此依赖也可以工作),可变(依赖会经常变动)
  • Field注入:大多数情况下尽量少使用字段注入,一定要使用的话, @Resource相对@Autowired对IoC容器的耦合更低

Field注入的缺点

  • 不能像构造器那样注入不可变的对象
  • 依赖对外部不可见,外界可以看到构造器和setter,但无法看到私有字段,自然无法了解所需依赖
  • 会导致组件与IoC容器紧耦合(这是最重要的原因,离开了IoC容器去使用组件,在注入依赖时就会十分困难)
  • 导致单元测试也必须使用IoC容器,原因同上
  • 依赖过多时不够明显,比如我需要10个依赖,用构造器注入就会显得庞大,这时候应该考虑一下此组件是不是违反了单一职责原则

为什么IDEA只对@Autowired警告

Field注入虽然有很多缺点,但它的好处也不可忽略:那就是太方便了。使用构造器或者setter注入需要写更多业务无关的代码,十分麻烦,而字段注入大幅简化了它们。并且绝大多数情况下业务代码和框架就是强绑定的,完全松耦合只是一件理想上的事,牺牲了敏捷度去过度追求松耦合反而得不偿失。

那么问题来了,为什么IDEA只对@Autowired警告,却对@Resource视而不见呢?

个人认为,就像我们前面提到过的:@Autowired是Spring提供的,它是特定IoC提供的特定注解,这就导致了应用与框架的强绑定,一旦换用了其他的IoC框架,是不能够支持注入的。而 @Resource是JSR-250提供的,它是Java标准,我们使用的IoC容器应当去兼容它,这样即使更换容器,也可以正常工作。


- EOF -

推荐阅读  点击标题可跳转

1、没有几十年功力,写不出这一行“看似无用”的代码!!

2、Linus 已决定将 Rust 语言加入 Linux 内核

3、虾皮光速大裁员!上个厕所的功夫,瞬间查无此人...


关注「程序员的那些事」加星标,不错过圈内事

点赞和在看就是最大的支持❤️

微信扫码关注该文公众号作者

戳这里提交新闻线索和高质量文章给我们。
相关阅读
木愉:水影小说的范式你好尾款人,这是我们近双十一不推荐的五款产品How Hangzhou Freed West Lake and Upended Chinese TourismThe Pet Industry Is Booming. So Are Its Horrific Breeding Mills.Young Chinese Are Overdosing on Cough Meds to Combat Stress我在斯坦福当教练和评委 My Learnings from Coaching Stanford Entrepreneurs!TruEdu Winter/Spring 22/23 Workshop【租房推荐】Chinatown近Downtown高级公寓楼推荐Tencent Halts E-Reader Service Following Kindle’s China RetreatHow a Chain-Smoking Marathon Runner Sparked a Furor in ChinaSocial Media Is Fueling Dangerous Beauty Trends — for Babies这种海姆立克先生发明的急救方法,指南早就不推荐了!忍了三年,再不推荐,她就永远消失了More Chinese Minors Are Online But Fewer Addicted, Report Says有铅中毒风险!GreenSprouts这款幼兒奶瓶、水杯 召回上万件发现一个Spring事务的巨坑bug,可是官方都不承认?大家来评评理!九大投行|Credit Suisse Securities Research Spring Program正在进行中!Spotlight Spring Savings 10月19日-11月6日打折图册(高清29页)2022傅雷翻译出版奖获奖者揭晓 Le palmarès du Prix Fu Lei 2022 dévoilé别再用 if 校验参数了,太Low!这才是专业的 SpringBoot 参数校验方式!大英博物馆, 与港台青年的“晚会”,1986伦敦穷游记(2)USC Downtown免免免免租|这个数?在 LA Downtown住进心愿单里的家对话 Spring 大神:Spring 生态系统的新时代来了!性能爆表:SpringBoot利用ThreadPoolTaskExecutor批量插入百万级数据实测!老电影《绿里奇迹》:感动与震撼台故宫文物想疏散给八国联军吗How China’s TikTok Is Driving a Female Literacy Revolution25个任务、123次有效载荷、193项实验,Space Tango打造太空实验平台【Space Medicine系列案例】Camping Is a Fad in China. Now Authorities Seek to Regulate It.Hunan Shuts Access to Forest Areas to Prevent More Wildfires那年暑假,我在农场里度过美国小学开学后,孩子们都在用的背单词秘籍,怎能不推荐你!For Gen-Z, Entrepreneurship Represents a Ticket to Freedom最近这种水果突然火了,但店老板却不推荐买!原因竟然是这个More Air Conditioning Workers Died This Summer: Media Report
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。