Перехватить доступ к частному полю для выполнения отложенной загрузки - PullRequest
1 голос
/ 02 марта 2012

У меня есть структура, которая загружает экземпляры произвольных классов от имени клиента и хотела бы, чтобы поля (в частности, закрытые поля) инициализировались / загружались лениво только при первом доступе к полям.

Есть ли способ перехватить такой доступ к частному полю и ввести значения в поле (возможно, также "кэшировать" их) до того, как значения будут возвращены?

Я предполагаю, что java.lang.reflect.Proxy / InvocationHandler исключены, поскольку они способны только перехватывать вызовы методов.

У меня есть ощущение, что библиотеки манипулирования байт-кодом могут справиться с этим.Я посмотрел на ASM, Javassist, BCEL, cglib и обыскал все вокруг, но не смог найти четких инструкций о том, как этого добиться.

1 Ответ

0 голосов
/ 02 марта 2012

Это, безусловно, выполнимо с инструментарием байт-кода с использованием ASM или аналогичных сред, но вам нужно будет понять внутреннюю работу байт-кода, а также некоторые внутренние компоненты JVM.

Более простой подход - использовать AspectJ и применять аспекты кваши объекты.В этой статье AOSD'07 есть несколько аналогичных примеров прозрачной кластеризации объектов Java.

...