java中InvocationHandler 用于实现代理。
来源:互联网 发布:试用版软件到期怎么办 编辑:程序博客网 时间:2024/05/16 11:58
InvocationHandler 用于实现代理。
如果不用InvocationHandler接口实现代理的话,我们写代码是这样的:
定义一个接口:
- Java code
- interface Greet{ void sayHello(String name); void goodBye();}
实现这个接口:
- Java code
- class GreetImpl implements Greet{ public void sayHello(String name) { System.out.println("Hello " + name); } public void goodBye() { System.out.println("Good bye."); }}
实现一个代理类
- Java code
- public class SimpleProxy implements Greet{ private Greet greet = null; SimpleProxy(Greet greet) { this.greet = greet; } public void sayHello(String name) { System.out.println("--before method sayHello"); greet.sayHello(name); System.out.println("--after method sayHello"); } public void goodBye() { System.out.println("--before method goodBye"); greet.goodBye(); System.out.println("--after method goodBye"); } /** * @param args */ public static void main(String[] args) { Greet greet = new SimpleProxy(new GreetImpl());//生成代理 greet.sayHello("walter"); greet.goodBye(); }}
代理其实没什么的,再看看如果实现了InvocationHandler接口,
我们怎样实现代理。
还是要实现原来的Greet接口。
接口的实现还是GreetImpl。
- Java code
- import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;public class DebugProxy implements java.lang.reflect.InvocationHandler{ private Object obj; public static Object newInstance(Object obj) { return java.lang.reflect.Proxy.newProxyInstance(obj.getClass().getClassLoader(), obj.getClass().getInterfaces(), new DebugProxy(obj)); } private DebugProxy(Object obj) { //Greet接口的實現:GreetImpl this.obj = obj; } //Method m:調用的方法 //Object[] args:方法要傳入的參數 public Object invoke(Object proxy, Method m, Object[] args) throws Throwable { Object result; try { //自定義的處理 System.out.println("--before method " + m.getName()); //調用GreetImpl中方法 result = m.invoke(obj, args); } catch(InvocationTargetException e) { throw e.getTargetException(); } catch(Exception e) { throw new RuntimeException("unexpected invocation exception: " + e.getMessage()); } finally { System.out.println("--after method " + m.getName()); } return result; } /** * @param args */ public static void main(String[] args) { Greet tmp = new GreetImpl(); Greet greet = (Greet) DebugProxy.newInstance(tmp); //生成的greet和tmp有相同的hashCode greet.sayHello("walter"); greet.goodBye(); }}
- java中InvocationHandler 用于实现代理。
- java中InvocationHandler 用于实现代理
- java中InvocationHandler 用于实现代理
- java中InvocationHandler 用于实现代理。
- java代理 InvocationHandler接口实现
- JAVA动态代理实现 Proxy InvocationHandler
- Java动态代理实现接口invocationHandler
- Java动态代理借助Proxy与InvocationHandler实现
- java动态代理实现Proxy和InvocationHandler cglib
- Java 基于JDK中的InvocationHandler实现动态代理
- Java动态代理以及InvocationHandler中invoke()方法笔记
- java动态代理-InvocationHandler Proxy
- Java动态代理InvocationHandler+Proxy
- java代理(AOP) InvocationHandler
- InvocationHandler+工厂设计模式 实现动态代理
- JAVA动态代理之:接口InvocationHandler
- java 动态代理学习(Proxy,InvocationHandler)
- java 动态代理深度学习(Proxy,InvocationHandler)
- js length
- ofbiz的webservice接口提供(2)-数据类型的局限性
- ASP.NET页面跳转的几种方法简单介绍
- GridView导出数据到Excel
- 不允许匿名访问时验证码不显示问题
- java中InvocationHandler 用于实现代理。
- 不定参数的应用
- pentaho框架中如何新建自己的solutions
- JSP动态生成并调用JSP程序,你这样用过吗?
- ASP.Net基于表单的身份验证
- 虚拟机概述及VPC和VS的区别
- iPhone开发:抢先拥抱软件开发的未来
- Oracle9i中实现自增列
- 手机软件开发入门 - 中国象棋(2)090311