Vamos falar sobre o modo de proxy Java com você
1. Proxy estático
1.1 Tanto o proxy estático de proxy quanto a classe de proxy devem manter uma interface comum.
interface pública iuserdao {void save ();}1.2 Classe de proxy, objeto de destino
classe pública userdao implementa iuserdao {@Override public void save () {System.out.println ("----- Os dados foram salvos !!! ------"); }}1.3 Objetos proxy
classe pública userdaoproxy implementa IUSERDAO {// Receba e salve o objeto de destino Private iUserdao Target; public userDaoproxy (IUSERDAO Target) {this.target = Target; } @Override public void save () {System.out.println ("Start Transaction ..."); Target.Save (); // método para executar o sistema de destino System.out.println ("Enviar transação ..."); }}1.4 Classe de teste
public class App {public static void main (string [] args) {// Objeto de destino iuserdao Target = new Userdao (); // proxy iuserdao proxy = new userdaoproxy (destino); proxy.save (); // execute o método proxy}} 2. Agente dinâmico
2.1 Da mesma forma, o proxy dinâmico também precisa concluir uma interface. (Semelhante a acima)
2.2 O objeto de destino é o mesmo.
2.3 É apenas diferente em objetos de proxy
classe pública proxyfactory {// Manter um destino de objeto de destino de destino Target; public proxyfactory (objeto destino) {this.target = Target; } // gerar um objeto proxy public objeto getProxyInstance () {return proxy.newproxyInstance (Target.getClass (). GetClassLoader (), Target.getClass (). transação "); // execute o objeto de destino Método do objeto retornValue = Method.inVoke (Target, args); System.out.println (" Enviar transação "); retornar retornarValue;}}); }}2.4 Classe de teste
public class App {public static void main (string [] args) {// Objeto de destino iuserdao Target = new Userdao (); System.out.println (Target.getClass ()); // Crie objeto proxy para o objeto de destino iuserdao proxy = (iuserdao) novo proxyfactory (target) .getproxyInstance (); System.out.println (proxy.getclass ()); // Método executado [objeto proxy] proxy.save (); }} 3. CGLIB Proxy
3.1CGLIB O proxy não precisa concluir a interface, ele só precisa escrever a classe e a classe proxy a ser proxyed. O proxy aqui é o mesmo que 1.2, por isso não está mais escrito.
3.2 A classe de proxy é diferente. Ao usar o modo CGLIB Proxy, você precisa se referir ao pacote principal da Spring.
public class Proxyfactory implemments MethodInterceptor {// Mantenha o destino do objeto de objeto de destino Target; public proxyfactory (objeto destino) {this.target = Target; } // Crie um objeto proxy para o objeto de destino Public Object getProxyInstance () {// 1. Enhancer da classe de ferramentas EN = new ENFERCER (); // 2. Defina a classe pai EN.SetSuperclass (Target.getClass ()); // 3. Defina a função de retorno de chamada en.setCallback (this); // 4. Crie uma subclasse (objeto proxy) retorna en.create (); } @Override Public Object Intercept (Object Obj, método do método, objeto [] args, MethodProxy Proxy) lança Throwable {System.out.println ("Start Transaction ..."); // Método para executar o objeto de destino do destino retornValue = Method.inVoke (Target, args); System.out.println ("Enviar transação ......"); return retornValue; }}3.3 Classe de teste
public class App {public static void main (string [] args) {// Target Object userdao Target = new Userdao (); System.out.println (Target.getClass ()); // proxy objeto userDao proxy = (userdao) novo proxyfactory (target) .getproxyInstance (); System.out.println (proxy.getclass ()); // método para executar o proxy objeto proxy.save (); }}O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.