当前位置: 首页 > article >正文

Field injection is not recommended – Spring IOC

在运行静态代码分析工具或从IDE检查/分析代码时,你可能会遇到以下关于@Autowired字段的警告:Field injection is not recommended

一、Spring IOC的注入类型有三种
  • 基于构造函数的依赖注入;
  • 基于Setter的依赖注入;
  • 基于字段的依赖注入;
二、基于字段的依赖注入缺陷
2.1 不允许不可变字段声明:

​ 基于字段的依赖注入不适用于声明final/immutable的字段,因为这些字段必须在类实例化时实例化。声明不可变依赖关系的唯一方法是使用基于构造函数的依赖注入。

2.2 容易违反单一职责设计原则:

​ 在面向对象计算机编程中,SOLID首字母缩略词定义了五个设计原则,这些原则将使你的代码易于理解、灵活和可维护。

​ SOLID中的S代表单一职责原则,这意味着一个类只应负责软件应用程序功能的一部分,其所有服务都应与该责任紧密结合。

​ 使用基于字段的依赖注入,在你的类中很容易有很多依赖关系,一切看起来很好。如果使用基于构造函数的依赖注入,随着更多的依赖关系被添加到你的类中,构造函数会变的越来越大,代码开始变的冗肿。

​ 拥有一个包含十多个参数的构造函数是一个明显的迹象,表明该类有太多的协作者,这可能是开始将该类拆分为更小、更易于维护模块的好机会。

​ 因此,字段依赖注入不是打破单一职责的直接原因,但它隐藏了很多信号,使我们很容易忽略这些信号。

2.3 与依赖注入容器紧密耦合:

​ 使用基于字段的注入的主要原因是避免getter和setter的样板代码或为类创建构造函数。最后,这意味着设置这些字段的唯一方法是通过Spring容器实例化类并使用反射注入他们,否则字段将保持为null,你的类将会被破坏或者无用。

​ 依赖注入设计模式将类依赖关系的创建与类本身分开,将这一责任转移给IOC容器,允许程序设计松散耦合,并遵循单一职责和依赖反转原则。因此,通过自动装配(autowiring)字段来实现的类的解耦,最终会因为再次与IOC容器耦合而丢失,从而使类在Spring容器之外变得无用。

2.4 隐藏依赖关系

在使用依赖注入时,受影响的类应该使用公共接口清楚地公开这些依赖项,方法是在构造函数中公开所需的依赖项,或者使用方法(setter)公开可选的依赖项。当使用基于字段的依赖注入时,实质上是将这些依赖对外隐藏了。

参考文档:https://blog.marcnuri.com/field-injection-is-not-recommended?spm=a2c6h.12873639.article-detail.9.c0b370fevQimF5
开源SDK:https://github.com/mingyang66/spring-parent


http://www.kler.cn/news/354048.html

相关文章:

  • AutoCompleteTextView
  • 【SuperHotSwap】IDEA零配置热更新插件升级
  • 【设计模式】深入理解Python中的原型设计模式
  • 【电商购物管理系统】Python+Django网页界面平台+商品管理+数据库
  • Unity3D模型消融方法(二)
  • vue中如何自定义Form表单rules校验方法(手机号/座机号、身份证号/社会统一信代码校验,支持多个,以英文逗号分隔)
  • Scala的filter函数
  • 网络基础一
  • 利用高德API获取整个城市的公交路线并可视化(五)
  • Promise.race()
  • 【python爬虫】携程旅行景点游客数据分析与可视化
  • Biotin-PEG-COOH 羧基-聚乙二醇-生物素的应用 蛋白质纯化 细胞标记
  • 如何将两个视频连接成一个?共有6个方法
  • 集成电路公司进销存系统生成合同——未来之窗行业应用跨平台架构
  • FreeRTOS - 任务通知
  • 锥线性规划【分布鲁棒、两阶段鲁棒方向知识点】
  • 基于SpringBoot的校园兼职管理系统
  • Scrapy | 爬取网易招聘信息来认识start_urls是POST请求时如何重写start_requests方法以及翻页问题的处理
  • 力扣题解(鸡蛋掉落,两枚鸡蛋)
  • Bug剖析