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
、あなたのコード内のどこか他の権利の実装を注入します。