私は@Componentを拡張し、別の@Componentクラスを作成し、一度に一つだけが利用できるようにすることができますか?

jishamenon :

私はアプリケーションの数を提供するライブラリの瓶を持っています。私が欲しいの挙動は、ライブラリ内の一般的な春のコンポーネントクラスを作成することです。アプリケーションでは、同じ構成要素が拡張されていない場合は、共通コンポーネントを使用します。それはアプリに拡張されます場合は、拡張コンポーネント(子クラス)を使用します。これは可能ですか? - そのクラスの子が存在しない場合にのみ、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、このメソッドは呼び出されません。

おすすめ

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