1

次のインターフェイスがあるとします。

public interface Interface1 {
}

および次のクラス:

public class Class1 implements Interface1 {}

また、私はこのクラスを持っています:

public class Class2 {
    private Interface1 interface;
    public void setInterface(Interface1 interface) {
        this.interface = interface;
    }
}

によって生成されapplicationContext.xmlたBeanをに注入するには、何を入れる必要がありますか?また、アノテーションでそれを行うことは可能ですか?Class1Class2.interface

4

3 に答える 3

1

他の Bean と同じように注入するだけで、ランタイム タイプに互換性がある限り問題なく動作します。XML のインターフェイス タイプで特別なことをする必要はありません。

<bean id="class1" class="package.Class1"/>
<bean id="class2" class="package.Class2">
  <property name="interface" ref="class1"/>
</bean>

@Autowiredもちろん、コンテナに interface1 の実装が複数ある場合は、 で Bean 名を指定する必要があります@Qualifier

于 2012-07-03T18:44:10.907 に答える
1
  • xml を使用する場合は問題ありません。Bean を定義し、(タイプではなく) Bean 名で Bean を注入します。
  • 注釈を使用する場合は、次を使用できます@Resource(name="beanName")または@Qualifier
于 2012-07-03T18:49:22.803 に答える
0

別の代替手段は javaconfig です。

package com.mycom.myapp.config;

@Configuration
public class MyConfiguration {
  @Bean
  public Class1 class1() {
    return new Class1();
  }

  @Bean
  public Class2 class2() {
    Class2 class2 = new Class2();
    class2.setInterface(class1());
  }
}

そして、xml 構成を取得して @Configuration アノテーション付きクラスを見つけるための、もう 1 つの小さな xml グルー コード。

<context:component-scan base-package="com.mycom.myapp.config" />

@Configuration を見ると、自動的にいくつかのスプリング マジックを実行し、そのクラスを使用して Bean を構築し、残りの Xml ベースのコンテキストでそれらを使用できるようにするため、必要に応じて組み合わせることができます。Bean スコープ、プロキシなどを処理するのに十分スマートです....そのクラスにローカルなメソッド (上記の例の "class1()" など) を呼び出す場合でも、気の利いた javassist マジックのおかげです。

詳細については、 http ://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/beans.html#beans-java を参照してください。

于 2012-07-03T19:20:25.147 に答える