アノテーション付きプライベートクラス属性のコンテナインジェクションはJavaでどのように機能しますか?
-
06-07-2019 - |
質問
Bill BurkeとRichard Monson-HaefelによるEnterprise Java Beans 3.0の本を読み始めました。第4章にはこのコードがあります
@PersistenceContext(unitName="titan") private EntityManager manager;
クラスには、このフィールドにアクセスするメソッドがあります(コンストラクターで設定されることはなく、setterメソッドはありません)。では、コンテナは実際のインスタンスでこのプライベートフィールドをどのように設定しますか?いくつかのリフレクションやバイトコードのマジックが進行していると仮定しています-それはどのように行われますか?
解決
getDeclaredFields()は、クラスで宣言されたフィールドのリストを返します。
コンテナは、すべてのフィールドをループして、適切な注釈をチェックします。必要なフィールドが見つかると、 setAccessible(true)を実行します。
他のヒント
manager.getClass().getDeclaredFields()
フィールドにアクセスできます。 javadocs こちら をご覧ください。 p>
所属していません StackOverflow