12

AspectJを使用する場合、@Configurableではなく@Componentを使用する理由。

@Transactionalサポート、自己呼び出しの側面、およびJPAエンティティへのインジェクションのためのSpringとAspectJのセットアップがあります。これはうまくいきます。

インジェクションが必要なほとんどのクラスに@Componentを使用しているため、依存関係にインジェクションする必要があります。または、できない場合は、ApplicationContextを挿入してから、最後の手段としてgetBean()を使用します。そして、インジェクションが必要なJPAエンティティ(Hibernate)に対してのみ@Configurableを予約しています。また、テストの作成を容易にするために、jUnitテストに@Configurableを使用し始めました。これもうまくいきます。

しかし、私は興味があります。AspectJが、構築方法に関係なく、@ Configurableアノテーションを使用して何かを自動注入(ビーン化)している場合。getBean()、new()、@Autowired。すべてのBeanに@Configurableの使用に切り替えないのはなぜですか?次に、アプリケーションコンテキストとgetBean()を完全に廃止し、注入できないクラスをnew()だけにすることができます。

XMLBeanの構成については触れていません。私はそれを恥ずかしがりませんが、このプロジェクトはたまたま何も必要としません。テスト時に、コンストラクターまたはセッターが依存関係を注入するだけです。非常に簡単。

4

3 に答える 3

13

@Component は、Bean の自動検出に関して Spring の手がかりを提供できる Spring マーカー インターフェースです。

@Configurable は、AOP ロードタイム ウィービングで使用されるマーカーです。

2人は実際にはあまり関係がありません。

于 2009-06-16T12:50:31.303 に答える
7

@Componentは、Spring 自体によってインスタンス化される@Configurableクラス用であり、一方は、独自のコードまたは別のフレームワーク (Hibernate によるエンティティーまたはサーブレット コンテナーによるサーブレットなど) によってインスタンス化されるクラス用です。

于 2012-06-26T14:52:06.270 に答える
1

常に使用すべきではない理由の 1 つ@Configurableは、多くのオーバーヘッドが追加されることです。多くの場合、アプリの起動に時間がかかり、新しいインスタンスの作成が遅くなります。

通常、すべてのインスタンスはSpringによって管理されるため@Component、まったく必要ありません。

于 2009-06-16T10:13:45.257 に答える