Как работает контейнерное внедрение аннотированных атрибутов частного класса в Java? - PullRequest
1 голос
/ 23 октября 2009

Я начал читать книгу Билла Бёрка и Ричарда Монсона-Хейфеля "Enterprise Java Beans 3.0", и в главе 4 она имеет такой код

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

Затем у класса есть методы, которые обращаются к этому полю (которое никогда не устанавливается в конструкторе и не имеет метода установки). Так, как контейнер устанавливает это частное поле с фактическим экземпляром? Я предполагаю, что происходит какое-то отражение и / или волшебство байт-кода - как это делается?

Ответы [ 2 ]

4 голосов
/ 23 октября 2009

getDeclaredFields () вернет список полей, объявленных в классе.

Контейнер перебирает все поля, проверяя наличие соответствующих аннотаций. Как только нужное поле найдено, оно вызывает setAccessible (true) для этого поля, чтобы иметь возможность манипулировать им из кода, который обычно не был бы доступен.

0 голосов
/ 23 октября 2009
manager.getClass().getDeclaredFields()

Получит ли вы доступ к полям. См. Javadocs здесь

...