2010-12-02 10 views

答えて

2

フィールド/セッター注入によって注入できます。 (コンストラクタインジェクションは、サポートされていますが、春になると目が覚めます)

+0

コンストラクタ注入よりもセッタ注入が優先されるのはなぜですか?私は彼らが同等だったと思った。 –

+0

コンストラクタインジェクションは、インスタンス化する循環依存をより困難にするかもしれません。 – Bozho

+0

@Bozho:実際には良いことです...循環依存関係を使うべきでしょうか? – TWiStErRob

0

です。 Springは "メソッドインジェクション"と呼ばれるものをサポートしていますが、あなたが考えているものとは異なります。 Springはコンストラクタインジェクションをサポートしていますが、あなたはコンストラクタを自分で呼び出すのではなく、Springはそれを配線しています。

代わりに、クラスをインスタンス化し、任意のパラメータを自分で渡すためにリフレクションを使用することができます。

Class<MyObject> clazz = MyObject.class; // this can be looked up or stored in a field, etc. 
MyObject myObject = clazz.getConstructor(String.class, int.class) 
         .newInstance("arbitrary parameter", 42); 
1

この重要な機能は、最終的には春4.1.0.RC2で追加されたように見えます。私はそれを試して、それは動作するようです。

これはJIRAチケットSPR-7431 ("Passing lookup-method arguments to created bean constructor")の一部として添加した:

<ルックアップ方法/>は、任意の数のパラメータを指定できるようにすべきです。これらのパラメータは、新しく作成したBeanのコンストラクタに直接渡す必要があります。

機能が最後に追加された方法の詳細については、this blog postがJIRAチケットを開いた人によって書かれています。

関連する問題