文章标题
来源:互联网 发布:大数据软件 编辑:程序博客网 时间:2024/05/26 12:55
java动态代理
基本概念待续。。。。先看实现代码
package com.devil.practice.proxy;/** * 需要被代理的接口 * * @author devil * */public interface ObjectInterface { /** * 第一个接口 * * @param index * 参数 * @return 返回值 */ public String getName(int index);}
package com.devil.practice.proxy;/** * 被代理对象的具体实现 * * @author devil * */public class ObjectImpl implements ObjectInterface { @Override public String getName(int index) { System.out.println("getName:" + index); String name = null; switch (index) { case 1: name = "index1"; break; case 2: name = "index2"; break; case 3: name = "index3"; break; default: name = "indexnull"; break; } return name; }}
package com.devil.practice.proxy;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;/** * 代理类的实现 * * @author devil * */public class ProxyHander implements InvocationHandler { private Object proxyObject; public ProxyHander(Object proxyObject) { super(); this.proxyObject = proxyObject; } @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { // 调用之前可以做其他的一些处理,比如对参数的重新封装 System.out.println("调用之前可以做其他的一些处理,比如对参数的重新封装。。。。。。"); // ----------------------------------------------- Object result = method.invoke(proxyObject, args); // ----------------------------------------------- // 调用结束后做一些其他的处理。比如对返回结果的处理 System.out.println("调用结束后做一些其他的处理。比如对返回结果的处理。。。。。。"); // 返回处理的结果 return result; }}
package com.devil.practice.proxy;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Proxy;/** * 代理生成工厂 * * @author devil * */public abstract class ProxyBuildFactory { public static ObjectInterface buildObject(ObjectInterface temp) { // 处理器生成 InvocationHandler handler = new ProxyHander(temp); // 获取代理对象的 ObjectInterface object = (ObjectInterface) Proxy.newProxyInstance(temp.getClass().getClassLoader(), temp .getClass().getInterfaces(), handler); return object; }}
package com.devil.practice.proxy;/** * 测试代码 * * @author devil * */public class ProxyMain { public static void main(String[] args) { System.out.println("。。。。。。。。。。。原是的调用方式。。。。。。。。。。。。"); ObjectInterface inter = new ObjectImpl(); System.out.println(inter.getName(2)); System.out.println("。。。。。。。。。。。原是的调用方式。。。。。。。。。。。。"); System.out.println("----------------------------------------------------"); System.out.println("。。。。。。。。。。。添加代理后的调用方式。。。。。。。。。。。。"); ObjectInterface inter2 = ProxyBuildFactory.buildObject(new ObjectImpl()); System.out.println(inter2.getName(2)); System.out.println("。。。。。。。。。。。添加代理后的调用方式。。。。。。。。。。。。"); }}
输出:
。。。。。。。。。。。原是的调用方式。。。。。。。。。。。。getName:2index2。。。。。。。。。。。原是的调用方式。。。。。。。。。。。。----------------------------------------------------。。。。。。。。。。。添加代理后的调用方式。。。。。。。。。。。。调用之前可以做其他的一些处理,比如对参数的重新封装。。。。。。getName:2调用结束后做一些其他的处理。比如对返回结果的处理。。。。。。index2。。。。。。。。。。。添加代理后的调用方式。。。。。。。。。。。。
0 0
- 文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题 文章标题 文章标题 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- git reset --hard
- javascript 手机号码正则表达式验证函数
- Android触摸事件传递流程图
- 使用CoreData查询数据:谓词过滤,排序操作
- L1-026. I Love GPLT java
- 文章标题
- 面向对象概念
- JAVA输出99乘法表
- 商城购物车业务逻辑
- 如何在app内部跳转到自己的app
- (转)关于Android MVP模式的思考
- 【Java】数据类型
- TypeError: window.open is not a function
- 如何解决Word文档插图显示不清晰问题