Как Hibernate создает прокси конкретных классов? - PullRequest
12 голосов
/ 24 декабря 2008

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

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

Ответы [ 4 ]

8 голосов
/ 30 декабря 2008

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

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

4 голосов
/ 02 августа 2010

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

hibernate.bytecode.provider=javassist
3 голосов
/ 11 сентября 2009

Подробнее см. Класс javassist.util.proxy.ProxyFactory .

3 голосов
/ 24 декабря 2008

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

http://cglib.sourceforge.net/

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

(и, возможно, когда-нибудь hibernate перейдет на использование AOP, и мир станет лучше).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...