java 代理模式
来源:互联网 发布:java输入字符串语句 编辑:程序博客网 时间:2024/05/02 00:06
java代理模式主要有JDK代理模式实现方式和CJLIB代理模式,我们通过代码认识代理模式
*
一、(JDK代理模式)
*
1、新建一个接口类
public interface Moveable { public void move();}
2、被代理类
public class Car implements Moveable { @Override public void move() { try { Thread.sleep(100); System.out.println("车子开始移动!"); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } }}
3、代理类
public class ProxyHandle implements InvocationHandler { private Object target; public ProxyHandle(Object target) { super(); this.target=target; } /** * proxy : 被代理对象 * method:被代理方法 * args :被代理方法参数 * * */ @Override public Object invoke(Object proxy, Method method, Object[] args)throws Throwable { long start=System.currentTimeMillis(); method.invoke(target); long end=System.currentTimeMillis(); System.out.println("移动时间:"+(end-start)+" 毫秒"); return null; }}
4、JDK动态代理
public class Test {
public static void main(String[] args) { Car car=new Car(); ProxyHandle ph=new ProxyHandle(car); Class c=car.getClass(); /** * 参数: * loader: * interfaces:所有继承的接口 * h:代理类 * */ //Proxy.newProxyInstance(loader, interfaces, h) //产生一个被代理对象 Moveable moveable= (Moveable) Proxy.newProxyInstance(c.getClassLoader(), c.getInterfaces(), ph); moveable.move();}
}
二(CJLIB)
1、被代理类
public class Train { public void move() { System.out.println("火车行驶中。。。。"); }}
2、代理类
public class CJLibProxy implements MethodInterceptor{ private Enhancer enhancer=new Enhancer(); public Object getProxy(Class clazz) { //设置创建子类的类 enhancer.setSuperclass(clazz); enhancer.setCallback(this); return enhancer.create(); } /** * 拦截所有目标类方法的调用 * * 参数: * obj 目标累的实例 * method 目标方法的反射对象 * proxy 代理类的实例 * * */ @Override public Object intercept(Object obj, Method method, Object[] args, MethodProxy proxy) throws Throwable { System.out.println("------日志准备开始------"); proxy.invokeSuper(obj, args); System.out.println("------日志已经结束------"); return null; }}
3、CJLIB代理测试类
public class TestCJLib { public static void main(String[] args) { CJLibProxy proxy=new CJLibProxy(); Train train= (Train) proxy.getProxy(Train.class); train.move(); }}
0 0
- Java代理之代理模式
- java代理模式---静态代理
- java代理模式--动态代理
- 代理模式&java动态代理
- JAVA代理模式--静态代理
- JAVA代理模式--动态代理
- JAVA动态代理 代理模式
- Java代理模式-静态代理
- java代理模式-动态代理
- Java代理模式 静态代理 动态代理
- JAVA代理模式与动态代理模式
- JAVA代理模式与动态代理模式
- JAVA代理模式与动态代理模式
- JAVA代理模式与动态代理模式
- JAVA代理模式与动态代理模式
- JAVA代理模式与动态代理模式
- Java代理模式和kotlin代理模式
- Java中的代理模式
- 吉林移动&&第一次校招投递简历经历
- 【问答】JSP中out.print 和 out.write 的区别
- solaris移植到linux的大坑:bash和sh中环境变量继承的差异
- 项目前端----WCF
- 安装gid12.0.4linux-x64l后启动报错/liblzma.so.5: no version information available 的解决办法
- java 代理模式
- 为何C语言(的函数调用)需要堆栈,而汇编语言却不需要堆栈
- uva 111 History Grading 最长公共子序列
- c++ new/delete的用法
- 【VC疑难】LINK : fatal error LNK1123: failure during conversion to COFF: file invalid
- iOS 开发中正则表达式实践(一)
- 删除.git .repo .gitignore 总结
- MVC 第三章 架构了解
- PCM格式