基本的には、プロパティーが設定されていて、何もしない何らかの種類のNoopBeanを作成したい。Spring Boot - そうでなければプロパティーセットがデフォルトBeanを作成するときにBeanを作成する
これを行う最もクリーンな方法は何ですか?
基本的には、プロパティーが設定されていて、何もしない何らかの種類のNoopBeanを作成したい。Spring Boot - そうでなければプロパティーセットがデフォルトBeanを作成するときにBeanを作成する
これを行う最もクリーンな方法は何ですか?
オブジェクトを両方ともBeanとして記述することができます。作成はカスタム条件に依存します。構成は次のようになります。
@Configuration
public class YourConfiguration {
@Bean(name="concreteBean")
@Conditional(YourCondition.class)
public YourInterface concreteBean(){
return new ConcreteBean();
}
@Bean(name="noopBean")
@Conditional(YourCondition.class)
public YourInterface noopBean(){
return new NoopBean();
}
}
@Conditionalアノテーションは、代替コンポーネントスキャンプロセスに依存し@Component
で注釈クラスを使用することができます。
あなたはまた、例えば、状態を説明するクラスを、必要とする:条件を記述するクラスを持つ
public class YourCondition implements Condition {
@Override
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
return "concret".equals(context.getEnvironment().getProperty("your.property"));
}
}
は非常に柔軟ですが、あなたは、単にプロパティを確認したい場合は、あなたが使用することができます@Condition
のより特殊化されたバージョンである@ConditionalOnPropertyであり、条件クラスを取り除く。その場合、豆のアノテーションに直接条件を記述します。
@ConditionalOnProperty(name="your.property", havingValue="concret")
この場合の欠点は、各Beanで同じ条件を繰り返す必要があることです。適切な意味のある名前を付けることができるので、別のクラスの単純な@Conditional
をお勧めします。
1つのオプションは次のとおりです。
@Bean
public MyInterface myBean() {
if (somePropertySet) {
return new RealBean();
} else {
return new NoOpBean();
}
}
別のオプションは、春のプロファイルを使用することです。
すでに春のプロファイルに(例えば「生産」、「ステージング」など)を使用している場合、第二のオプションは意味をなすこと@Bean
@Profile("noop-profile")
public MyInterface myBean() {
return new NoOpBean();
}
@Bean
@Profile("real-profile")
public MyInterface myBean() {
return new RealBean();
}