【问题标题】:Guice: the @Inject at static fieldsGuice:静态字段的@Inject
【发布时间】:2017-01-31 08:27:42
【问题描述】:

现在我在看PlayFramework的官方文档,其实没关系。

我看到了这句话:

请注意,这些是实例字段。注入静态字段通常没有意义,因为它会破坏封装。

他们解释说不推荐对静态字段使用@Inject 注释。为什么? 我不明白“打破封装”。你认为这句话是什么意思?

【问题讨论】:

    标签: java dependency-injection playframework guice


    【解决方案1】:

    有点明显的OOP原理(封装),所以@Inject会提供一个实例字段(这个取自Play文档),那么让它静态化当然会很奇怪,因为ALL 实例将共享字段 A 的同一个对象,这是可能的问题之一,也是破坏封装

    的定义之一

    不建议将此 API 用于一般用途,因为它会遭受许多 与静态工厂相同的问题:测试很笨拙,它使 依赖是不透明的,它依赖于全局状态。

    【讨论】:

      【解决方案2】:

      也许是因为风格

      class Foo
      {
        @Inject
        static String propery;
      }
      

      等价于

      class Foo
      {
        static String propery;
      
        Foo(String property) {
          this.property = property;
        }
      }
      

      不知道实现细节的人可能会对结果感到惊讶

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-05-24
        • 1970-01-01
        • 1970-01-01
        • 2014-03-21
        • 2015-04-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多