2017-03-15 3 views
1

有用な再利用可能なSpringコンポーネントがある場合は、それらをライブラリとして利用できるようにして、他のプロジェクトでそれらのコンポーネントのサブセットを使用することができますか?Springコンポーネントをライブラリにバンドルすることで、他のプロジェクトでそれらの一部を使用することができますか?

など。 X1X2X3X4の4つのクラスがあり、それぞれ@Component(または,@Controllerなど)のアノテーションを付けてライブラリにバンドルします。

それから私はX1X3を使用することにのみ関心のプロジェクトAとX3X4を使用することにのみ興味を持って別のプロジェクトBを持っています。

プロジェクトAとBは、関心のあるコンポーネントだけを選択的に有効にする方法を教えてください。

私はスプリングブートを使用していますので、各コンポーネントに@ConditionalOnPropertyと注釈を付けることができました。私はそうのようななどX1に注釈を付けることができます:

@ConditionalOnProperty("x1.enabled") 
@Component 
public class X1 { 

を次に下流のプロジェクトは、彼らがX1を使用したい場合は、そのapplication.propertiesファイルにx1.enabled = trueを追加する必要があります。

これはやり方ですか、コンポーネントをバンドルして再利用するための標準的な方法がありますか?

私は他のアプローチ、例えば考えることができます。:

  • 独自のパッケージ内の各コンポーネントを配置し、下流のプロジェクトは、彼らが使用していた部品のちょうどパッケージをスキャンする@ComponentScanを使用することができます。
  • コンポーネントクラスに@Componentを残して、抽象的にマークしてから、任意のコンポーネントをサブクラス化するだけで、サブクラスに@Componentを追加することができます。

これらのアイデアの最初は、完全なハッキングのように聞こえる目はそんなに悪い音ではありませんが、1つは、単に何かを有効にするためにサブクラスを作成する必要があります(ただし、少なくとも、それはあなたがやっていることはかなり明白なのです) 。

ちょっと注意してください - 私はXMLを使わないですべての注釈ベースの設定を使用しています。

+0

私は答えたいとは思わないと思います。これは、XMLプロバイダBean、データソース、トランザクションマネージャ、または任意の数の他のBeanを作成するたびに、通常Springで常時実行している処理です。今あなたは自分の豆を書いていて、突然あなたは何をすべきか分からないのですか? – Snickers3192

+0

おかげさまで@ Snickers3192 - 卑劣なコメントは、常に明確な答えよりも役立ちます。あなたが私のサブプロジェクトでコンポーネントを作成できるのは、私が豆を作成するのと全く同じですが、これはそうではありません。少なくとも豆を作成する方法ではありません。私は通常、 '@Config'のような名前のクラスで行います。このクラスには' @Configuration'で注釈が付けられ、 '@Bean'でアノテーションされたメソッドのセットが含まれています。 Beanではなくコンポーネントを作成するために、これらのメソッドの1つに '@ Component'を注釈することはできません。これを行う方法がわかっている場合は、投票できる回答を提示してください。 –

+0

あなたが望む豆で別の構成を作成するのを止めるものは何もありません。 – Snickers3192

答えて

0

私が提案した最初のオプションは良い選択です。クラスを別のパッケージに入れて、興味のあるパッケージをスキャンすることができます。

しかし、最初のオプションが気に入らないので、次のことをお勧めします。

クラスの@componentを外して、設定(xmlファイルまたは@configurationクラス)でBeanとして定義できます。最後に、各プロジェクトは必要なクラスを設定します。

次に、これらのBeanをすべてのプロジェクトの他のBeanに挿入できます。

関連する問題