Hablemos del modo de proxy Java contigo
1. Proxy estático
1.1 Tanto el proxy estático como la clase proxy deben mantener una interfaz común.
interfaz pública iuserdao {void save ();}1.2 Clase proxy, objeto objetivo
UserDao de clase pública implementa iuserdao {@Override public void save () {System.out.println ("----- ¡Los datos han sido guardados! ------"); }}1.3 objetos proxy
UserDaoproxy de clase pública implementa iuserdao {// Recibir y guardar el objeto de destino objetivo privado iuserdao objetivo; Public UserDaOproxy (IUSERDAO Target) {this.target = target; } @Override public void save () {System.out.println ("Iniciar transacción ..."); Target.save (); // Método para ejecutar el objeto de destino System.out.println ("Enviar transacción ..."); }}1.4 Clase de prueba
Aplicación de clase pública {public static void main (string [] args) {// Object Target IUSerDAO Target = new UserDao (); // proxy iuserdao proxy = new UserDaoproxy (Target); proxy.save (); // Ejecutar el método proxy}} 2. Agente dinámico
2.1 Del mismo modo, el proxy dinámico también necesita completar una interfaz. (Similar a arriba)
2.2 El objeto objetivo es el mismo.
2.3 Es simplemente diferente en objetos proxy
public class proxyFactory {// Mantener un objetivo de objeto de objeto Private Object Target; public proxyFactory (objetivo de objeto) {this.target = target; } // Generar un objeto PROXY Public Object getProxyInStance () {return proxy.newproxyInstance (target.getClass (). GetClassLoader (), target.getClass (). GetInterfaces (), nuevo invocationHandler () {@Override Public Object Invoke (Object proxy, Method, Method, Object [] Shows showsable transacción "); // Ejecutar el objeto de objeto de destino Objeto ReturnValue = Method.Invoke (Target, Args); System.out.println (" Subt Transaction "); return returnValue;}}); }}2.4 Clase de prueba
Aplicación de clase pública {public static void main (string [] args) {// Object Target IUSerDAO Target = new UserDao (); System.out.println (Target.getClass ()); // Crear objeto proxy para el objeto objetivo iuserdao proxy = (iuserdao) nuevo proxyFactory (objetivo) .getProxyInstance (); System.out.println (proxy.getClass ()); // ejecutar método [objeto proxy] proxy.save (); }} 3. Proxy CGLIB
3.1CGLIB proxy no necesita completar la interfaz, solo necesita escribir la clase de clase y proxy para que se proxyen. El proxy aquí es el mismo que 1.2, por lo que ya no está escrito.
3.2 La clase proxy es diferente. Cuando use el modo CGLIB proxy, debe consultar el paquete Core Framework de Spring.
Public Class ProxyFactory Implements MethodInterceptor {// Mantener el objetivo de objeto de objeto Private Object Target; public proxyFactory (objetivo de objeto) {this.target = target; } // Crear un objeto proxy para el objeto de destino Objeto público getProxyInstance () {// 1. Herrament Class Enhancer EN = New Enhancer (); // 2. Establecer la clase principal en.setsuperClass (target.getClass ()); // 3. Establecer la función de devolución de llamada en.setCallback (esto); // 4. Crear una subclase (objeto proxy) return en.create (); } @Override Public Object Intercept (object obj, método método, objeto [] args, métodeProxy proxy) lanza lanzable {System.out.println ("Iniciar transacción ..."); // Método para ejecutar objeto de destino Objeto returnValue = Method.Invoke (Target, Args); System.out.println ("Enviar transacción ......"); return returnValue; }}3.3 Clase de prueba
aplicación de clase pública {public static void main (string [] args) {// Object Target userDao Target = new UserDao (); System.out.println (Target.getClass ()); // Objeto proxy userdao proxy = (userDao) nuevo proxyFactory (target) .getProxyInstance (); System.out.println (proxy.getClass ()); // método para ejecutar el objeto proxy proxy.save (); }}Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.