12

@SpringBeanWicketの注釈はどのように機能しますか?実行時にリフレクションを使用しますか?コンパイラにコードを挿入させますか?または何?

4

3 に答える 3

29

@SpringBeanWicketの基盤となるインジェクターメカニズムを使用して動作します。@SpringBeanWicketコンポーネントをインスタンス化すると、Wicketのコンポーネント基本クラスのコンストラクターがインスタンス化されているクラスをイントロスペクトし、アノテーションを探します。Beanが見つかった場合、WicketはSpring Beanのプロキシを生成し、それをコンポーネントのフィールドに挿入します。これはWicketのSpringの@Autowired注釈に相当し、効果は似ています。

ただし、Spring独自のコンテキスト/クラスパススキャン機能(たとえば@Component)とは関係ありません。これは、Beanであるかどうかの自動検出に関するものであり、配線とは関係ありません。

于 2009-12-23T13:21:17.183 に答える
5

@SpringBeanアノテーションが付けられたクラスには、次のいずれかが必要です。

  1. 引数なしのコンストラクター
  2. 引数なしのコンストラクターを持つスーパークラス
  3. インターフェイスを実装する

Wicketはクラスをプロキシできないため、これらの条件が満たされない場合は例外がスローされます。

于 2012-02-11T10:36:19.460 に答える
0

Springは、実行時にクラスローダーとASMを使用して、注釈付きのすべてのクラスを検索します。

SpringがBeanを検索する場所を構成できます。

<context:component-scan base-package="some.package.to.start.from"/>

これは、内部でClassPathBeanDefinitionScannerを使用し、PathMatchingResourcePatternResolver使用してクラスを検索し、ASMベースのMetadataReaderを使用して注釈を読み取ります。

于 2009-12-22T16:27:30.430 に答える