2017-03-20 13 views
0

ロンボクとguiceの注射に新しいですが、私は一般的な概念を得ることができましたが、私は理解していないし、構文のために検索することができないいくつかのコードに遭遇した。以下はコードですが、誰かが私にこれを理解させるのに役立つことができますか?ロンボクとguiceの注射

import com.google.inject.Inject; 
import lombok.AccessLevel; 
import lombok.AllArgsConstructor; 

@AllArgsConstructor(access = AccessLevel.PRIVATE, onConstructor = @__({ @Inject })) 
public class SomeClass { 
... 
} 

ありがとうございます!これはあなたのコードがに展開されますので、@Inject注釈とprivate修飾子で、パラメータとしてすべてのフィールドとコンストラクタを追加する予定です

答えて

2

import com.google.inject.Inject; 

public class SomeClass { 

    @Inject 
    private SomeClass() { 
    } 
} 

これは、クラスにはフィールドが存在しないと仮定しています。あなたには、いくつかのフィールドを持っている場合、彼らはそれが必要なため、これは、とにかくGuiceのでは動作しないこと、

import com.google.inject.Inject; 
import lombok.AccessLevel; 
import lombok.AllArgsConstructor; 

@AllArgsConstructor(access = AccessLevel.PRIVATE, onConstructor = @__({ @Inject })) 
public class SomeClass { 
    private String name; 
} 

import com.google.inject.Inject; 

public class SomeClass { 
    private String name   

    @Inject 
    private SomeClass(String name) { 
     this.name = name; 
    } 
} 

は注意してくださいになりますたとえば

ため、コンストラクタに追加されますこのドキュメントではプライベートではないコンストラクタです: https://github.com/google/guice/wiki/InjectionPoints

希望すると助かります!

+2

"とにかくGuiceではこれは動作しません。なぜなら、非公開のコンストラクタを必要とするからです。"これは、コンストラクタに '@ Inject'アノテーションがない場合にのみ当てはまります。注釈では、AOPは機能しない点を除いて、Guiceはそれをうまく処理します。 –