2016-04-10 9 views
0

フォームコンストラクター注入をセッター注入に移行するのは安全ですか?スプリングセッター注入保証

私のオブジェクトが使用時に完全に構​​築されていることをセッター注入で保証していますか?

+0

両方の注射によって保証されます。しかし、コンストラクタの注入には、循環依存性に関するいくつかの制限があります。 –

答えて

0

はい安全です。コンストラクタ・インジェクションで

、春には(このケースでは、あなたの依存関係フィールドにfinal修飾子を追加できることに注意してください)適切な引数でコンストラクタを呼び出します。

セッター・インジェクションでサンプル

private final SomeBean dependency; 

public MyObject(SomeBean dependency){ 
    this.dependency = dependency; 
    doInit(); 
} 

private void doInit(){ 
    //doStuff to initialize your bean 
} 

、春はデフォルトコンストラクタ(すなわち、引数なしのコンストラクタ)を使用してBeanをインスタンス化します。 次のステップでは、すべての@Autowired依存関係が設定されるように、必要なすべてのsetterを呼び出します。 最後に、Springは@PostConstructアノテーションを持つメソッドを呼び出します。セッター・インジェクションを使用して

サンプル

@Autowired 
private SomeBean dependency; 

@PostConstruct 
private void doInit(){ 
    //doStuff to initialize your bean 
} 

は一つの利点があります(それは部分的に豆を構築とセッターを呼び出すことができますので)あなたのBean間の循環依存関係の場合には、春には、それらを解決することができるようになります。 が部分的に豆はできません構築するという理由だけで、一方

(あなたのセッターは本当のセッターで、フィールドに値を割り当てる以上のものをすれば、それは大丈夫です)、春には、コンストラクタ・インジェクションを使用しているとき、円形の依存関係を解決するために失敗しましたコンストラクターの引数としてよく使用されます。

0

私は少し遅れて相手にだけど、ここでは任意のオブジェクト指向言語setter/field injection is evilでは2ポイントで私の2セント、

  • です。
  • 設計エラーであるため、循環依存インジェクションのために高速で失敗する方が良いです。そして、それらに気付かないと後者に悪影響を与える可能性があります。
関連する問題