9

Springでコンストラクターの特定の引数のみを自動配線することは可能ですか?

私は定義しました:

<bean class="MyClass">
    <constructor-arg name="name" value="object name" />
</bean>

と:

public class MyClass{
    private String name;
    private MyDAO dao;

    @Autowired
    public MyClass(String name, MyDao dao){
        // assign...
    }

    // ...
}

MyDaoここで、引数を明示的に定義しながら、オブジェクトを自動配線したいと思いnameます。出来ますか?

XMLを使用してBeanを定義するには、すべての引数を手動で定義する必要がありますか?

4

4 に答える 4

6

自動配線されたコンストラクターではすべてのパラメーターに影響するため、これを行うことはできませんが、これは行うことができます。

public class MyClass{
    private String name;

    @Autowired
    private MyDAO dao;

    public MyClass(String name){
        // assign only name
    }

    // ...
}

DAOのセッターを使用するのと似ていますが、そのパブリックセッターをクラスで公開しません。

于 2012-07-05T14:24:32.723 に答える
2

私があなたの質問を正しく読んだ場合、あなたはあなたがあなたの文脈の他の場所で定義したMyDaoインスタンスに配線し、nameパラメーターにハードコードされた文字列値を提供できるかどうか尋ねています。それが正しければ、次のようにクラスを構成します

<bean class="MyClass">
  <constructor-arg value="Hardcoded string value for the name" />
  <constructor-arg ref="myDaoInstance" />
</bean>

そしてあなたのコンテキストファイルの他の場所

<bean class="MyDao" id="myDaoInstance>
  //relevant config
</bean>
于 2012-07-05T14:23:08.613 に答える
0

MyDaodaoに@Autowiredを追加する必要があるようです。宣言してから、コンストラクターを変更して、名前paramを取得します。MyDaoに自動的にアクセスできるようになります

于 2012-07-05T14:23:21.617 に答える
0

可能です。

このリンクを参照してください:

static.springsource.org/spring/docs/3.0.x/reference/beans.html#beans-autowired-annotation-qualifiers

于 2012-07-05T14:28:58.610 に答える