2つの可能な実装でBeanを定義します

ZED:

これまでのところ、私はこのように見えた非常に単純なBean定義を持っていました:

@Bean
@Conditional(value=ConditionClass.class)
SomeInterface myMethodImpl(){
    return new ImplementationOne();
}

しかし、私は今、追加の実装クラスが追加されている状況がある、のは、それを呼びましょうImplementationTwoの代わりに使用する必要のある、ImplementationOneオプション設定ファイルで有効になっている場合。

それでは、私に必要なのはこのようなものです:

@Bean
@Conditional(value=ConditionClass.class)
SomeInterface myMethodImpl(){
    return context.getEnvironment().getProperty("optionEnabled") ? new 
   ImplementationOne() : new ImplementationTwo();
}

設定値に基づいて、ビーン定義時に正しい実装をインスタンス化するための基本的な方法。これは可能であると誰もが例を提供してくださいできますか?感謝

破壊します:

使用せずにこれを実装することが可能です@Conditional

あなたが持っていると仮定インターフェースSomeInterfaceと2つの実装をImplOne ImplTwo

SomeInterface.java

public interface SomeInterface {
    void someMethod();
}

ImplOne.java

public class ImplOne implements SomeInterface{
    @Override
    public void someMethod() {
       // do something
    }
}

ImplTwo.java

public class ImplTwo implements SomeInterface{
    @Override
    public void someMethod() {
       // do something else
    }
}

そして、あなたはこのような構成のクラスで使用された実装を制御することができます:

MyConfig.java

@Configuration
public class MyConfig {

    @Autowired
    private ApplicationContext context;

    @Bean
    public SomeInterface someInterface() {
        if (this.context.getEnvironment().getProperty("implementation") != null) {
            return new ImplementationOne();
        } else {
            return new ImplementationTwo();
        }
    }
}

春の発見のコンポーネントスキャンいることを確認してくださいMyConfig次に、あなたが使用することができ@Autowired、あなたのコード内のどこか他の権利の実装を注入します。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=209099&siteId=1