2017-01-31 2 views
0

PlayFrameworkの公式ドキュメントを読んでいますが、実際には問題ありません。Guice:@Inject at static fields

そして私はこの文を見た:それらはインスタンスフィールドであることを

注意を。それはカプセル化を壊すので、通常、静的フィールドを注入するのは意味がありません。

彼らは、静的フィールドに対して@Inject注釈を使用することは推奨されないと説明しました。どうして? 「カプセル化を中断する」とは分かりません。あなたは彼らが文で何を意味すると思いますか?たぶん

答えて

0

に驚くことができ

class Foo 
{ 
    static String propery; 

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

のequiavalentであるため、 @Injectは、インスタンスフィールドを提供します(これはPlayのドキュメントから取られています)。その後、それは静的にするのが奇妙になります。のALLインスタンスは、可能な問題の一つと破壊カプセル化の定義の1

このAPIであるフィールドA、のために同じオブジェクトを共有することが の多くを被るので、一般的な使用にはお勧めしません静的ファクトリと同じ問題:テストするのが厄介ですが、 の依存関係は不透明になり、グローバルな状態に依存します。

0

文体

class Foo 
{ 
    @Inject 
    static String propery; 
} 

は、実装の詳細を知らない人は、それはとても、OOPの原則(カプセル化)ちょっと明らかだ結果