2016-06-01 5 views
-1

intelliJをダウンロードしました。これは私のインジェクションをコンストラクタに入れるアドバイスです。しかし、彼らがアドバイスしているとき、空のコンストラクタが必要だと私に伝える他のアドバイスメッセージがあります。ですから、私はこのようなものを実装する最良の方法が何であるか疑問に思っています。Cdiコンストラクタインジェクションejb

これは毎分実行するjsfアプリケーションの単なるバックグラウンドタスクです。

@Singleton 
public class MatchesBgService implements Serializable { 
    @Inject //intelliJmessage : Hey, you should use constructor injection 
    private MatchLookup ml; 
    @Inject 
    private MatchTask bgTask; 

    public MatchesBgService(){ 
     comparator = new MatchComparator(); 
    } 

    @Schedule(hour = "*", minute = "*/1", second = "20", persistent = false) 
    public void gettingMatches() { 
+0

@BalusC建築上の質問ではなく間違ったインポートです。 – Ced

+0

@BalusCアーキテクチャ上の問題ではないという情報提供 – Ced

答えて

1

あなたのコードは次のようになります。

@Singleton 
public class MatchesBgService implements Serializable { 

    private final MatchLookup ml; 
    private final MatchTask bgTask; 

    @Inject 
    public MatchesBgService(MatchLookup ml, MatchTask bgTask){ 
     this.ml = ml; 
     this.bgTask = bgTask; 

     // ... 
    } 
} 

あなたの疑問に答える:

  1. 理にかなってどこコンストラクタ・インジェクションを使用するために良い習慣を考えられています。
  2. CDI仕様によれば、(プロキシ可能なクラスを持つために)デフォルトの空のコンストラクタが必要です。
    しかし、幸いにも、少なくともウェルドはそれを必要としません - 私の上記のコード はうまく動作します。

だから、IntelliJがあなたにこれらのアドバイスを提供します。
乾杯。

+0

シングルトンのインポートをejbのoineでないように変更しなければならなかった – Ced

+0

それは本当だ。 –

関連する問題