【发布时间】:2017-01-31 08:27:42
【问题描述】:
现在我在看PlayFramework的官方文档,其实没关系。
我看到了这句话:
请注意,这些是实例字段。注入静态字段通常没有意义,因为它会破坏封装。
他们解释说不推荐对静态字段使用@Inject 注释。为什么?
我不明白“打破封装”。你认为这句话是什么意思?
【问题讨论】:
标签: java dependency-injection playframework guice
现在我在看PlayFramework的官方文档,其实没关系。
我看到了这句话:
请注意,这些是实例字段。注入静态字段通常没有意义,因为它会破坏封装。
他们解释说不推荐对静态字段使用@Inject 注释。为什么?
我不明白“打破封装”。你认为这句话是什么意思?
【问题讨论】:
标签: java dependency-injection playframework guice
有点明显的OOP原理(封装),所以@Inject会提供一个实例字段(这个取自Play文档),那么让它静态化当然会很奇怪,因为ALL 实例将共享字段 A 的同一个对象,这是可能的问题之一,也是破坏封装
不建议将此 API 用于一般用途,因为它会遭受许多 与静态工厂相同的问题:测试很笨拙,它使 依赖是不透明的,它依赖于全局状态。
【讨论】:
也许是因为风格
class Foo
{
@Inject
static String propery;
}
等价于
class Foo
{
static String propery;
Foo(String property) {
this.property = property;
}
}
不知道实现细节的人可能会对结果感到惊讶
【讨论】: