当前位置: 首页 > 面试题库 >

Java如何避免依赖注入构造函数的疯狂?

麻昌翰
2023-03-14
问题内容

我发现我的构造函数开始看起来像这样:

public MyClass(Container con, SomeClass1 obj1, SomeClass2, obj2.... )

不断增加的参数列表。由于“容器”是我的依赖项注入容器,所以为什么我不能这样做:

public MyClass(Container con)

每堂课?不利之处是什么?如果执行此操作,则感觉就像我在使用精美的静态方法。请分享你对IoC和依赖注入疯狂的想法。


问题答案:

正确的是,如果将容器用作服务定位器,则它或多或少是光荣的静态工厂。由于种种原因,我认为这是一种反模式。

构造函数注入的奇妙好处之一是,它使违反单一责任原则的行为显而易见。

发生这种情况时,就该重构为Facade Services了。简而言之,创建一个新的,更粗粒度的接口,以隐藏你当前需要的一些或所有细粒度依赖项之间的交互。



 类似资料:
  • 我需要重构现有的抽象类来实现依赖注入,但是这个类有两个接受其他参数的构造函数。 我需要注入一些接口,并避免在构造函数中传递任何其他参数,如“settingsId”和“Setting”。所以我的想法是在创建此类的实例后创建两种方法来设置这些参数。 但它看起来不是一个合适的解决方案,因为如果开发人员忘记在创建实例后运行这些方法之一,我们将来可能会得到一个异常(对象未设置为引用...)。我应该如何正确执

  • 我正试图在计算机上实现这个例子https://developer.android.com/jetpack/docs/guide.这就解释了Android应用程序的结构。 当我使用相同的代码时,我会出现以下错误。 我可以找出这个错误与 当我为ViewModel编写默认的零输入构造函数时,我得到了以下错误。 我想不出这个错误的原因和解决方法。

  • 在之前的所有JUnit版本中,测试构造函数或方法都不允许有参数(至少不能使用标准的Runner实现)。作为JUnit Jupiter的主要变化之一,测试构造函数和方法现在都允许有参数。这带来了更大的灵活性,并为构造函数和方法启用依赖注入。 ParameterResolver定义了测试扩展的API,希望在运行时动态解析参数。如果测试构造函数或@Test, @TestFactory, @BeforeE

  • 我有以下课程: 该类包含两个可选值,我想提供所有可能的构造函数排列。第一个版本不初始化任何内容,第二个版本只初始化第一个值,第三个版本只初始化第二个值。 最后一个构造函数是第二个和第三个构造函数的组合。但这是不可能写下来的,因为代码失败了。 是否可以在没有任何代码冗余的情况下(也不调用相同的setter方法)编写最后一个构造函数?

  • 问题内容: 我有一个客户端库,在该客户端库中对我的REST服务进行http远程调用,然后返回给客户,该客户正在调用我的库,其中包含从REST服务获得的响应以及所有错误(如果包装了任何错误)围绕对象。 这是我的枚举类: 这是我的枚举类: 如您所见,在我的课堂上我有很多领域,因此我有一个很长的构造器,每次当我做一个对象的时候都会有很大的联系。将来我可能会有更多的字段,但目前只有这些字段。 有什么更好的

  • 当容器调用具有许多参数的类构造函数时,完成基于构造函数的DI,每个参数表示对另一个类的依赖。 例子 (Example) 以下示例显示了一个类TextEditor ,它只能通过构造函数注入进行依赖注入。 让我们有一个可用的Eclipse IDE,并按照以下步骤创建一个Spring应用程序 - 脚步 描述 1 创建一个名为SpringExample的项目,并在创建的项目中的src文件夹下创建一个包co