@SpringBean
Wicketの注釈はどのように機能しますか?実行時にリフレクションを使用しますか?コンパイラにコードを挿入させますか?または何?
3 に答える
@SpringBean
Wicketの基盤となるインジェクターメカニズムを使用して動作します。@SpringBean
Wicketコンポーネントをインスタンス化すると、Wicketのコンポーネント基本クラスのコンストラクターがインスタンス化されているクラスをイントロスペクトし、アノテーションを探します。Beanが見つかった場合、WicketはSpring Beanのプロキシを生成し、それをコンポーネントのフィールドに挿入します。これはWicketのSpringの@Autowired
注釈に相当し、効果は似ています。
ただし、Spring独自のコンテキスト/クラスパススキャン機能(たとえば@Component
)とは関係ありません。これは、Beanであるかどうかの自動検出に関するものであり、配線とは関係ありません。
@SpringBeanアノテーションが付けられたクラスには、次のいずれかが必要です。
- 引数なしのコンストラクター
- 引数なしのコンストラクターを持つスーパークラス
- インターフェイスを実装する
Wicketはクラスをプロキシできないため、これらの条件が満たされない場合は例外がスローされます。
Springは、実行時にクラスローダーとASMを使用して、注釈付きのすべてのクラスを検索します。
SpringがBeanを検索する場所を構成できます。
<context:component-scan base-package="some.package.to.start.from"/>
これは、内部でClassPathBeanDefinitionScannerを使用し、PathMatchingResourcePatternResolverを使用してクラスを検索し、ASMベースのMetadataReaderを使用して注釈を読み取ります。