私はアプリケーションの数を提供するライブラリの瓶を持っています。私が欲しいの挙動は、ライブラリ内の一般的な春のコンポーネントクラスを作成することです。アプリケーションでは、同じ構成要素が拡張されていない場合は、共通コンポーネントを使用します。それはアプリに拡張されます場合は、拡張コンポーネント(子クラス)を使用します。これは可能ですか? - そのクラスの子が存在しない場合にのみ、CommonComponentを作成します。
私は、Java 1.8を使用しています、Springboot2.0
ライブラリ内のクラスを作成しました:
@Component
public class CommonComponent{}
ライブラリを使用して、子のアプリケーションの一つで、私は、子コンポーネントを追加しました:
@Component
public class ChildComponent extends CommonComponent{}
私は1つのコンポーネントChildComponentが作成した予想しました。しかし、上記のシナリオでは2つの成分 - CommonComponentとChildComponentが作成されます。
あなたがこれを行うことが一つの方法は、を利用することである@ConditionalOnMissingBean
春ブーツが持つ注釈。でBean定義と組み合わせると@Configuration
、クラスが既に1を持っていない場合、私たちは私たちのBeanを定義するために春を告げることができます。
これはテストされていません。
@Configuration
public class CustomComponentConfiguration {
@ConditionalOnMissingBean(CustomComponent.class)
@Bean
public CustomComponent customComponent() {
return new CustomComponent();
}
}
この例では、私たちのとき@Configuration
である他のBeanがある場合に実行されると、春が決定しますCustomComponent
。そうでない場合、それは実行customComponent()
あなたが返すものは何でも豆の方法と定義します。だから、誰かが定義されている場合ChildComponent
、このメソッドは呼び出されません。