2017-06-04 13 views
0

私は春のブートと依存性注入の初心者で、私は春のブートのコンストラクタベースの依存性注入の周りに頭を上げることはできません。春のブートコンストラクタベースの依存性注入

public class ParameterDate { 

    private Date parameterDateUnadjusted; 
    private Date parameterDateAdjusted; 
    private Date parameterDateAdded; 
    private Date parameterDateChanged; 
} 

私はParameterDateを使用する別のクラスを持っている:私はこのようになりParameterDateというクラスを持っています。通常、私は

@Autowired 
ParameterDate parameterDate; 

、これまで私はちょうどparameterDateを使う必要とフィールドベースの注入を行うだろう。

コンストラクタベースの注入でこれをどうすればできますか?

+0

http://olivergierke.de/2013/11/why-field-injection-is-evil/非常に良い書き込み – pvpkiran

+0

@pvpkiranありがとう。私は提案されたポストを読むでしょう。 – g3blv

+0

[Setter DIとSpringのコンストラクタDIの重複の可能性がありますか?](https://stackoverflow.com/questions/7779509/setter-di-vs-constructor-di-in-spring) –

答えて

2
public MyClazzRequiringParameterDate(ParameterDate parameterDate){ 
    this.parameterDate = parameterDate; 
} 

ブート1.4 @Autowiredは、コンストラクタではオプションです。明示的にしたい場合は、コンストラクタに@Autowiredというタグを付けることができます。

一般に、コンストラクタ>セッタ>フィールド注入をお勧めします。フィールドに直接注入することはDIのポイントを逃してしまいます。つまり、モックやスタブを直接渡すのではなく、依存関係を注入するためにSpringに依存していることを意味します。 Jurgan Hollerは可能な限りフィールド注入を取り除くと述べている。