Распространенным приложением является создание прокси-классов во время выполнения, то есть создание подкласса во время выполнения, который перехватывает все вызовы методов.Примеры:
Hibernate использует прокси для перехвата вызовов методов на объектах для реализации отложенной загрузки, то есть извлечения объекта из базы данных при первом обращении к нему.
Spring Framework использует Proxies для реализации своей поддержки AOP , которая, помимо прочего, обеспечивает поддержку декларативных транзакций.Он также использует прокси-серверы для обеспечения правильной видимости.
EJB использует прокси-серверы для реализации транзакций, управляемых контейнером, проверки авторизации и применения пользовательских перехватчиков.
Реализации CDI должны также проксировать управляемые bean-компоненты для обеспечения надлежащей области видимости.Я подозреваю, что они также используют библиотеку разработки байт-кода.
I недавно использовал Javassist для реализации прозрачного кэша для возвращаемых значений метода, перехватывая все вызовы метода и делегируя только супер реализациипри первом вызове.
Обратите внимание, что java.lang.reflect.Proxy
может генерировать прокси-классы во время выполнения, но может только реализовывать интерфейсы, но не расширять класс.Все вышеперечисленные варианты использования требуют проксирования классов.