2008-12-24 14 views
12

Nach meinem besten Wissen erfordert das Erstellen eines dynamischen Java-Proxys, dass eine Schnittstelle für den Proxy arbeiten muss. Dennoch scheint Hibernate seine dynamische Proxy-Generierung zu verwalten, ohne dass man Schnittstellen für Entitätsklassen schreiben muss. Wie macht es das? Der einzige Hinweis aus der Hibernate-Dokumentation bezieht sich auf die Tatsache, dass Klassen mindestens einen Package-Visible-Konstruktor für die Proxy-Generierung haben müssen.Wie erstellt Hibernate Proxies konkreter Klassen?

Ist Hibernate Runtime Bytecode Engineering mit einem benutzerdefinierten Classloader? Die Dokumentation deutet darauf hin, dass dies nicht der Fall ist. Wie erstellen sie ihre Proxy-Wrapper um die konkreten Entitätsobjekte? Erstellen sie einfach einen Proxy einer trivialen Schnittstelle, ohne sich um die Typsicherheit zu kümmern, und wandeln Sie sie dann wie gewünscht um?

Antwort

3

Um den Proxy-Ersteller zu verwenden, der in Java ist, ja, Sie sind richtig, aber ich glaube, Hibernate verwendet CGLib, um seine Proxies zu generieren.

http://cglib.sourceforge.net/

Es ist ein cooles Programm, und keine Schnittstellen benötigen einen Proxy zu generieren.

(und vielleicht irgendwann Hibernate wird mit AOP und die Welt wird ein besserer Ort sein).

+0

ja, es nicht verwendet cglib –

4

Hibernate verwendet den Bytecode-Provider in hibernate.properties konfiguriert, zum Beispiel:

hibernate.bytecode.provider=javassist