有用な再利用可能なSpringコンポーネントがある場合は、それらをライブラリとして利用できるようにして、他のプロジェクトでそれらのコンポーネントのサブセットを使用することができますか?Springコンポーネントをライブラリにバンドルすることで、他のプロジェクトでそれらの一部を使用することができますか?
など。 X1
、X2
、X3
、X4
の4つのクラスがあり、それぞれ@Component
(または,@Controller
など)のアノテーションを付けてライブラリにバンドルします。
それから私はX1
とX3
を使用することにのみ関心のプロジェクトAとX3
とX4
を使用することにのみ興味を持って別のプロジェクトBを持っています。
プロジェクトAとBは、関心のあるコンポーネントだけを選択的に有効にする方法を教えてください。
私はスプリングブートを使用していますので、各コンポーネントに@ConditionalOnProperty
と注釈を付けることができました。私はそうのようななどX1
に注釈を付けることができます:
@ConditionalOnProperty("x1.enabled")
@Component
public class X1 {
を次に下流のプロジェクトは、彼らがX1
を使用したい場合は、そのapplication.properties
ファイルにx1.enabled = true
を追加する必要があります。
これはやり方ですか、コンポーネントをバンドルして再利用するための標準的な方法がありますか?
私は他のアプローチ、例えば考えることができます。:
- 独自のパッケージ内の各コンポーネントを配置し、下流のプロジェクトは、彼らが使用していた部品のちょうどパッケージをスキャンする
@ComponentScan
を使用することができます。 - コンポーネントクラスに
@Component
を残して、抽象的にマークしてから、任意のコンポーネントをサブクラス化するだけで、サブクラスに@Component
を追加することができます。
これらのアイデアの最初は、完全なハッキングのように聞こえる目はそんなに悪い音ではありませんが、1つは、単に何かを有効にするためにサブクラスを作成する必要があります(ただし、少なくとも、それはあなたがやっていることはかなり明白なのです) 。
ちょっと注意してください - 私はXMLを使わないですべての注釈ベースの設定を使用しています。
私は答えたいとは思わないと思います。これは、XMLプロバイダBean、データソース、トランザクションマネージャ、または任意の数の他のBeanを作成するたびに、通常Springで常時実行している処理です。今あなたは自分の豆を書いていて、突然あなたは何をすべきか分からないのですか? – Snickers3192
おかげさまで@ Snickers3192 - 卑劣なコメントは、常に明確な答えよりも役立ちます。あなたが私のサブプロジェクトでコンポーネントを作成できるのは、私が豆を作成するのと全く同じですが、これはそうではありません。少なくとも豆を作成する方法ではありません。私は通常、 '@Config'のような名前のクラスで行います。このクラスには' @Configuration'で注釈が付けられ、 '@Bean'でアノテーションされたメソッドのセットが含まれています。 Beanではなくコンポーネントを作成するために、これらのメソッドの1つに '@ Component'を注釈することはできません。これを行う方法がわかっている場合は、投票できる回答を提示してください。 –
あなたが望む豆で別の構成を作成するのを止めるものは何もありません。 – Snickers3192