当前位置: 首页 > 网络应用技术

[春季]谈论为什么春季建议使用构造函数注入

时间:2023-03-07 01:57:08 网络应用技术

  I.简介

  春季框架对Java开发的重要性是自我的。它的核心功能是IOC(控制反转)和AOP。最常用的是IOC。对象的依赖性受弹簧的控制,以避免由硬编码引起的过度真诚耦合。几天前,我的同事问我为什么使用构造函数的注射方法。我回答说,因为弹簧文件推荐了这一点,所以我无法说明为什么讨论是其注入方法。

  第二,三种常见的注射方式

  为了方便起见,作者只是注入注释(现在它很少使用XML,(? ̄  ̄  ̄)?)2.1场注射

  这种注射方法应该是我到目前为止在开发中看到的最常见的注射方法。原因很简单:

  2.2 Conternsure注射

  这是Spring4.x版本中建议的建议方法。与上述现场注射方法相比,这似乎有些丑陋,尤其是当注射依赖项(超过5个)显而易见时,代码看起来肿了。对于从菲尔德+痴迷 - 螺栓脉冲注射的花园朋友时,可以说是Be Shi Lezhi(`д′*)9。LET稍后讨论,不用担心。

  2.3设置器注入

  启动Spring3.X时,建议使用此功能。我现在还没有看到这种注释方法。写作很麻烦。在TimeExact单词中:

  Keke,简单的翻译是:构造函数注入参数太多,看起来很笨重。此外,Setter方法可以使用该类重新配置或以后注入。

  那么,为什么它替换为构造函数并稍后注入呢?错误(????????((?(?)?)?)

  第三,构造仪注入的好处

  让我们看一下Spring在文档中所说的内容:

  keke,让我们简单地翻译:注入该构造函数的方法可以确保注射的组件没有变化,并确保所需的依赖项不是空的。此外,构造函数注入的依赖项可以始终确保返回时完整的初始化状态客户端(组件)代码。

  让我们在下面简要解释:

  等待,比较二传剂注入和构造仪注入的优势和缺点。您不使用使用现场注入与构造函数的比较!然后让我们回顾一下并查看最多的现场注入方法:

  //承担上述注入的代码。如果客户端代码使用以下调用(或在JUNIT测试中使用)//这只是模拟。通常,我们只会将接口公开到客户端,并且不会公开。FooControllerfoocontroller = new FooController();

  如果您注射了字段,则缺点是显而易见的。对于IOC容器以外的其他环境,不能重复使用实现类,除了使用反射提供依赖关系外,这将始终是潜在的隐藏危险,因为您将无法在没有呼叫的情况下找到NPE的存在。

  还值得一提的是,另一点是:注射域可能会导致循环依赖性,也就是说,在B中注入B中的B中的B中的B中的B中的B中的B再次a:

  如果注入了构造函数,则当春季项目开始时,它将抛出:BeanCurrantyIncreationException:当前正在创建请求的BEAN:是否存在无法解决的圆形参考?这提醒您避免循环依赖性。如果将其注入字段,则在启动时不会报告错误,并且在使用该BEAN时会报告错误。

  第四,回答问题

  好吧,我相信花园朋友知道构造仪注入的好处,所以我回到了前面提到的问题:

  Q1:正如您在3.x中所说的那样,如果我有很多依赖性注入,构造函数会看起来肿吗?

  关于这个问题,班上有太多的责任,因此您必须考虑是否违反了班级的单一性别责任原则,这导致了很多依赖。

  Q2:不适合其他注射方法吗?

  当然不是,存在是合理的!由于春季肯定会在春季推荐的二传手方法,所以它必须具有其原因。就像前面提到的二传剂方法一样,可以重新配置或注射以后,这是其优点之一。此外,如果有多种实现方法,我们可以使用@qualifier,请选择构造函数中的相应名称注入,或使用字段或设置器方法手动配置要注入的实现。

  5.摘要

  使用构造函数注入的好处:

  此外,当有一种依赖性和多重实施时,建议使用现场注射或二传剂注入来指定注射类型。这是春季官方博客在setter注入方法和构造仪注入方面的比较。

  原始:https://juejin.cn/post/7095666160943202334