Ответ 1
Начиная с Hibernate 3.3, поставщик байт-кода по умолчанию теперь Javassist, а не CGLib.
Насколько я знаю, для создания динамического прокси Java требуется, чтобы у одного из них был интерфейс для работы с прокси-сервером. Тем не менее, Hibernate, похоже, управляет своим динамическим генератором прокси, не требуя, чтобы один интерфейс записи для классов сущностей. Как оно работает? Единственный ключ из документации Hibernate относится к тому факту, что классы должны иметь как минимум конструктор, видимый для пакета, для генерации прокси.
Является ли Hibernate выполнением встроенной обработки байт-кода с помощью специального загрузчика классов? Документация предполагает, что это не так. Итак, как они создают свои прокси-обертки вокруг конкретных объектов объекта? Разве они просто создают прокси-сервер какого-то тривиального интерфейса, не заботясь о безопасности типов, а затем бросают его по своему желанию?
Начиная с Hibernate 3.3, поставщик байт-кода по умолчанию теперь Javassist, а не CGLib.
Hibernate использует поставщика байтового кода, настроенного в hibernate.properties
, например:
hibernate.bytecode.provider=javassist
Чтобы использовать создатель прокси-сервера, который находится в java, да, вы правы, но я считаю, что hibernate использует CGLib для генерации своих прокси-серверов.
Его классная программа и не требует интерфейсов для создания прокси.
(и, возможно, когда-нибудь спящий режим перейдет к использованию АОП, и мир станет лучшим местом).
Подробнее см. в разделе javassist.util.proxy.ProxyFactory.