java 设计模式之动态代理
来源:互联网 发布:南京行知实验中学排名 编辑:程序博客网 时间:2024/06/03 07:08
最近在读曾宪杰的java中间件,这本书还是很值得推荐的,书中讲解的动态代理也是不多哔哔,几句话就说出了重点。
下面是一些总结:
首先来看一下静态代理
业务实现类:package dynamicproxy;public class CalculatorImpl implements Calculator{@Overridepublic int add(int a, int b){return a + b;}}代理类:package dynamicproxy;public class CalculatorProxy implements Calculator{private Calculator calculator;public CalculatorProxy(Calculator calculator){this.calculator = calculator;}@Overridepublic int add(int a, int b){ // do other thing beforeint result = calculator.add(a, b);// do other thing afterreturn result;}}OK这很容易看明白,就是代理类代理具体业务对象在执行方法前后做些事情。那么有个减法类但是我们代理它做的事情和加法这个代理类完全一样我们在继续写一个减法的代理类?答案显然是否定的:动态代理就是解决这类问题的:对于做同样事情的代理我们只需实现一遍。根据运行时候对象去确定该调用那个具体的业务操作。不难想象这玩意是用反射搞的。有兴趣的自己可以去实现一下,jdk是对动态代理有支持这对我们来说是福音。代理对象只需要实现InvocationHandler就可以啦下面是动态代理的一个简单实现:package dynamicproxy;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;public class LogHandler implements InvocationHandler{Object object;public LogHandler(Calculator object){this.object=object;}@Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable{System.out.println("记录操作日志执行方法前--執行了:"+method.getName());Object o=method.invoke(object, args);return o;}}测试:package dynamicproxy;import java.lang.reflect.Proxy;public class TestDynamicProxy{public static void main(String[] args){Calculator calculator=new CalculatorImpl();LogHandler handler=new LogHandler(calculator);Calculator proxy=(Calculator) Proxy.newProxyInstance(calculator.getClass().getClassLoader(), calculator.getClass().getInterfaces(),handler);proxy.add(5, 5);}}
阅读全文
0 0
- java设计模式之动态代理模式!
- java设计模式之代理模式,java动态代理
- java设计模式之代理模式,java动态代理
- java设计模式之动态代理
- Java设计模式Proxy之动态代理
- java设计模式之动态代理
- Java设计模式Proxy之动态代理
- Java设计模式Proxy之动态代理
- Java设计模式Proxy之动态代理
- Java设计模式之动态代理
- java设计模式之---动态代理
- Java设计模式Proxy之动态代理
- java 设计模式之动态代理
- Java设计模式之动态代理
- java设计模式之静态代理与动态代理
- Java设计模式之—静态代理和动态代理
- java设计模式之静态代理和动态代理
- Java设计模式之 静态代理和动态代理
- 引用参数传递
- NDK开发——FFmpeg在Linux下编译、测试编译结果
- hello!以后就在这里分享自己的学习进度和成果
- js:Jquery 异步提交表单(post)
- Oracle数据库体如何用才是最好用的呢?
- java 设计模式之动态代理
- 简述src和href的区别
- 包含十个数字的除法
- 存储过程
- sar详解
- Ubuntu中创建快捷方式
- Pat(A) 1093. Count PAT's (25)
- 做到这一点,你也可以成为优秀的程序员
- JAVA多线程