java动态代理类的实现
来源:互联网 发布:js md5 编辑:程序博客网 时间:2024/05/16 23:36
动态代理分为:JDK动态代理和CGLIB动态代理
JDK动态代理和CGLIB动态代理类的区别:
JDK动态代理:1.只能代理实现了的接口的类;2.没有实现接口的类不能实现JDK的动态代理。
CGLIB动态代理:1.针对类来实现代理;2.对指定目标产生一个子类,通过方法拦截技术拦截所有的父类方法的调用。
JDK的动态代理需要一个实现了InvocationHandler的接口和Proxy类共同完成。
InvocationHandler接口:是代理类的实例的调用处理程序的接口,每个代理类的实例都有一个关联的调用处理程序,对代理实例调用方法时,将对方法调用进行编码并将其指派到他的调用处理程序的invoke方法。
Proxy类:用于创建动态代理类和实例的静态方法,它还是由这些方法创建的所有动态代理类的超类。
Proxy类中有一个静态方法newProxyInstance(参数1,参数2,参数3)用来创建动态代理类的实例。
参数1:
- 定义代理类的类加载器java实现某一个文件的时候需要将它对应的.class文件加到JVM虚拟机中,classLoader方法将.class文件加入到JVM虚拟几种,因此参数1可以是当前项目中的任何一个类的classloader。这里我们举一个JDK动态代理的例子
Move接口
public interface Move {public void run();
}Car实例public class Car implements Move {
public void run() {
System.out.println("汽车行驶中。。。");
}
}继承了InvocationHandler的类public class ProxyInvocationHandler implements InvocationHandler {
private Move move;
public void setMove(Move move) {
this.move = move;
}
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
System.out.println("汽车开始行驶");
method.invoke(move, args);
System.out.println("汽车行驶结束");
return null;
}
}JDK动态代理类的测试public class test1 {
public static void main(String arg[]){
Move mo=new Car();
ProxyInvocationHandler ph=new ProxyInvocationHandler();
ph.setMove(mo);
Move aa=(Move)Proxy.newProxyInstance(mo.getClass().getClassLoader(), Car.class.getInterfaces(), ph);
aa.run();
}
}
0 0
- java的反射实现动态代理类
- java动态代理类的实现
- Java动态代理的实现
- Java动态代理的实现
- Java动态代理的实现
- Java动态代理的实现
- Java动态代理的实现
- java动态代理的实现
- java动态代理的实现
- Java动态代理的实现
- Java动态代理的实现
- Java动态代理的实现
- Java动态代理的实现
- java动态代理的实现
- Java动态代理的实现
- Java动态代理的实现
- Java动态代理的实现
- Java动态代理的实现
- PAT帅到没朋友
- 项目中自定义异常的使用
- 【学习总结】Oracle数据的基本用法
- 动态规划-算法学习之路
- Handler,Message,Looper之间的联系(一)
- java动态代理类的实现
- 模拟实现strcpy
- rm -fr * 数据恢复
- python学习笔记(5):list的基本操作
- 关于ECDSA/ECC(密钥加密传输)和ECDSA/ECDH(密钥磋商)
- py2.7《机器学习实战》利用k-means聚类算法对未标数据分组
- shutdown与shutdownNow
- shell 进度条
- iOS开发 添加framework运行出现dyld: Library not loaded:的解决方法