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

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

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

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
12
0
8 382
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Начиная с Hibernate 3.3, поставщиком байт-кода по умолчанию теперь является Javassist, а не CGLib.

Руководство по миграции Hibernate Core: 3.3

См. Подробности в классе javassist.util.proxy.ProxyFactory.

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

hibernate.bytecode.provider=javassist

Другие вопросы по теме