现在我正在阅读PlayFramework的官方文档,但它实际上并不重要。
我看到了这句话:
请注意,这些是实例字段。注入静态字段通常没有意义,因为它会破坏封装。
他们解释说,对静态字段使用@Inject
注释已弃用。为什么?
我不明白"打破封装"。你觉得这句话是什么意思?
答案 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用于一般用途,因为它会受到很多影响 与静态工厂相同的问题:它的测试很笨拙 依赖关系不透明,它依赖于全局状态。