java - mvc - ¿Cómo crea Hibernate proxies de clases concretas?
spring mvc 4 tutorial español (4)
A mi leal saber y entender, crear un proxy Java dinámico requiere que uno tenga una interfaz para trabajar en contra del proxy. Sin embargo, Hibernate parece administrar su generación de proxy dinámico sin requerir que uno escriba interfaces para clases de entidad. ¿Como hace esto? La única pista de la documentación de Hibernate se refiere al hecho de que las clases deben tener como mínimo un constructor visible para el paquete para la generación de proxy.
¿Está Hibernate haciendo ingeniería de código byte en tiempo de ejecución con un cargador de clases personalizado? La documentación sugiere que este no es el caso. Entonces, ¿cómo crean sus envolturas de proxy alrededor de los objetos de la entidad concreta? ¿Acaban de crear un proxy de alguna interfaz trivial sin preocuparse por la seguridad del tipo y luego lanzarlo como se desee?
Para usar el creador de proxy que está en Java, sí, está en lo cierto, pero creo que hibernate usa CGLib para generar sus proxies.
Es un programa genial y no requiere interfaces para generar un proxy.
(y tal vez algún día hibernate pasará a usar AOP y el mundo será un lugar mejor).
Ver clase javassist.util.proxy.ProxyFactory para más detalles.
Hibernate usa el proveedor de códigos de bytes configurado en hibernate.properties
, por ejemplo:
hibernate.bytecode.provider=javassist
Desde Hibernate 3.3, el proveedor predeterminado de bytecode ahora es Javassist en lugar de CGLib.