私たちが使用する必要がある場合、ソフトウェア設計の観点から、@Component
従来のJavaクラスの代わりに(ニーズが明示的に「新しい」によってインスタンス化されることを)?たとえば、私たちは以下のパターンのうちの1つであるクラスを作成する必要がある場合:
アダプタ
ブリッジ
ファサード
戦略
翻訳者
クラスが持つべき@Component
注釈(または任意の春派生注釈をなど@Repository
/ @Controller
/ @Service
)?
春は、あなたがそれを心配する必要はありませんので、フレームワークのハンドルがあなたのために詰め込むことにドリルダウン制御原理の反転を適用します。
クラスに@Componentを使用することによって、あなたは春があなたのためにBeanを作成してみましょう。この方法で春は、例えば、あなたがそれを必要とするランタイムにこのBean噴射することができます。(あなたのコンストラクタをオートワイヤリングにより、例えば)。
それはあなたのクラスのために、この機能を利用したいかどうかを判断するのはあなた次第です。例えばファサードは非常によくSpringコンポーネント、あなたはおそらく依存性の注入の実装を考える必要がなく、実行時のファサードを介して公開されたAPIの実装を注入でき、この方法かもしれません。
私は、例えばDTOやモデルクラスにこの注釈を使用してお勧めしません。これらのクラスは、ほとんどのデータで構成されており、春で管理する必要性に合いません。
コンポーネントを作成するときに決定するのに役立つことができる他の興味深い関連質問:
春@Component、@Repository&@Service注釈の違いは何ですか?