使用GUICE使用外部服务的Design Service Manager类

时间:2016-10-18 22:49:22

标签: java design-patterns guice

在我的应用程序中,我有一个服务管理器来处理我的所有请求。现在,此Service Manager使用外部服务来完成某些特定类型的请求。

例如,请考虑以下示例代码:

 Class ServiceManager{

    private final A a;
    private final B b;

    private ExternalService externalService; 


      @Inject
      public ServiceManager(A a, B b)
      {
                this.a =a;
                this.b =b;
      }

      public void processIncomingRequestUsingExternalService(){...}


      }

现在为了初始化ExternalService,使用GUICE

更好
  • 使用setter注入,因为将来可能会有' n'此服务管理器可能要使用的不同类型的外部服务的数量。
  • 或者使用构造函数注入,因为我已经使用了A类和B类对象,它们是我应用程序的内部类。

注意: - 这里ExternalService是外部服务的帮助者。

1 个答案:

答案 0 :(得分:0)

构造函数注入比setter注入具有以下优势:

  • 明确声明对正在阅读代码的人的依赖。
  • 单元测试变得更清洁。
  • 依赖关系可以标记为“最终”,从而增加不变性。

更详细地讨论差异的好文档:https://www.petrikainulainen.net/software-development/design/why-i-changed-my-mind-about-field-injection/