Jdk动态代理类的‘源’代码猜想
来源:互联网 发布:mac电脑怎样退出程序 编辑:程序博客网 时间:2024/06/08 00:49
Dog.java:
public interface Dog{// info方法声明void info();// run方法声明void run();}
DogUtil.java
public class DogUtil{// 第一个拦截器方法public void method1(){System.out.println("=====模拟第一个通用方法=====");}// 第二个拦截器方法public void method2(){System.out.println("=====模拟通用方法二=====");}}
MyInvakationHander.java
public class MyInvokationHandler implements InvocationHandler{// 需要被代理的对象private Object target;public void setTarget(Object target){this.target = target;}// 执行动态代理对象的所有方法时,都会被替换成执行如下的invoke方法public Object invoke(Object proxy, Method method, Object[] args)throws Exception{DogUtil du = new DogUtil();// 执行DogUtil对象中的method1。du.method1();// 以target作为主调来执行method方法Object result = method.invoke(target , args);// 执行DogUtil对象中的method2。du.method2();return result;}}
MyProxyFacory.java
public class MyProxyFactory{// 为指定target生成动态代理对象public static Object getProxy(Object target)throws Exception{// 创建一个MyInvokationHandler对象MyInvokationHandler handler = new MyInvokationHandler();// 为MyInvokationHandler设置target对象handler.setTarget(target);// 创建、并返回一个动态代理return Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces() , handler);}}
Test.java
public class Test{public static void main(String[] args) throws Exception{// 创建一个原始的GunDog对象,作为targetDog target = new GunDog();// 以指定的target来创建动态代理Dog dog = (Dog)MyProxyFactory.getProxy(target);dog.info();dog.run();}}
当调用dog.info()的时候会调用到hander.invoke()方法中,再借鉴到struts2中的代理对象的实现,我觉得可能生成的动态代理DogProxy类的源代码可能是这样的:
DogProxy.java
class DogProxy { InvcationHandler handler;public setHandler( InvcationHandler handler) { this.handler = handler;}public info() { handler.invoke();}public run() { handler.invoke();}}
- Jdk动态代理类的‘源’代码猜想
- jdk动态代理实现代码
- JDK的动态代理
- JDK的动态代理
- JDK的动态代理
- JDK的动态代理
- JDK的动态代理
- Jdk的动态代理
- 自己写的JDK动态代理类
- 模拟JDK动态代理类的实现
- JDK的动态代理机制
- JDK的动态代理机制
- JDK的动态代理原理
- JDK的动态代理机制
- JDK的动态代理机制
- JDK的动态代理机制
- jdk动态代理的实现
- JDK的动态代理机制
- 搜索引擎蜘蛛算法与蜘蛛程序构架
- MATLAB
- Android的单位值计算
- 无线路由器的网关显示WAN口未连接(解)
- win7 下无法删除文件
- Jdk动态代理类的‘源’代码猜想
- 高效算法设计专项:UVa 10391
- MATLAB获得开始
- 详细教程:编译Linux最新内核
- 矩阵和队列
- 矩阵和魔方
- 计算几何专项:UVa 12301
- Cstyle的UEFI导读之Drivr binding
- Linux 下svn配置