Guice:静态字段中的@Inject

时间:2017-01-31 08:27:43

标签: java dependency-injection playframework guice

现在我正在阅读PlayFramework的官方文档,但它实际上并不重要。

我看到了这句话:

  

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

他们解释说,对静态字段使用@Inject注释已弃用。为什么? 我不明白"打破封装"。你觉得这句话是什么意思?

2 个答案:

答案 0 :(得分:0)

也许是因为风格上的

class Foo
{
  @Inject
  static String propery;
}

的等价物
class Foo
{
  static String propery;

  Foo(String property) {
    this.property = property;
  }
}

那些不了解实施细节的人可能会对结果感到惊讶

答案 1 :(得分:0)

这是一种明显的OOP原则(封装),因此@Inject将提供一个实例字段(这取自Play文档),当然,将它设为静态会很奇怪,因为 ALL < / strong>实例将共享字段A的相同对象,这是可能的问题之一,并且打破封装的定义

  

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