1

Bill Burke と Richard Monson-Haefel による Enterprise Java Beans 3.0 の本を読み始めましたが、第 4 章にこのコードがあります。

@PersistenceContext(unitName="titan") private EntityManager manager;

クラスには、このフィールドにアクセスするメソッドがあります (コンストラクターで設定されることはなく、setter メソッドもありません)。では、コンテナはこのプライベート フィールドを実際のインスタンスでどのように設定するのでしょうか? リフレクションやバイトコードの魔法が起こっていると思います - それはどのように行われますか?

4

2 に答える 2

4

getDeclaredFields()は、クラスで宣言されたフィールドのリストを返します。

コンテナーは、適切な注釈をチェックするすべてのフィールドをループします。必要なフィールドが見つかると、通常はアクセスできないコードからフィールドを操作できるようにするために、そのフィールドでsetAccessible(true)を呼び出します。

于 2009-10-23T18:33:57.610 に答える
0
manager.getClass().getDeclaredFields()

フィールドにアクセスできます。こちらのJavadocを参照してください

于 2009-10-23T18:23:47.163 に答える