Подтвердить что ты не робот

Как Hibernate создает прокси-классы конкретных классов?

Насколько я знаю, для создания динамического прокси Java требуется, чтобы у одного из них был интерфейс для работы с прокси-сервером. Тем не менее, Hibernate, похоже, управляет своим динамическим генератором прокси, не требуя, чтобы один интерфейс записи для классов сущностей. Как оно работает? Единственный ключ из документации Hibernate относится к тому факту, что классы должны иметь как минимум конструктор, видимый для пакета, для генерации прокси.

Является ли Hibernate выполнением встроенной обработки байт-кода с помощью специального загрузчика классов? Документация предполагает, что это не так. Итак, как они создают свои прокси-обертки вокруг конкретных объектов объекта? Разве они просто создают прокси-сервер какого-то тривиального интерфейса, не заботясь о безопасности типов, а затем бросают его по своему желанию?

4b9b3361

Ответ 2

Hibernate использует поставщика байтового кода, настроенного в hibernate.properties, например:

hibernate.bytecode.provider=javassist

Ответ 3

Чтобы использовать создатель прокси-сервера, который находится в java, да, вы правы, но я считаю, что hibernate использует CGLib для генерации своих прокси-серверов.

http://cglib.sourceforge.net/

Его классная программа и не требует интерфейсов для создания прокси.

(и, возможно, когда-нибудь спящий режим перейдет к использованию АОП, и мир станет лучшим местом).