关于java JDK动态代理的浅显理解
2017-09-10 09:22
543 查看
首先我是在用spring AOP的时候才认识到java中的动态代理,在这里我稍微谈一谈我自己对JDK动态代理的理解
首先说明两个问题,在前面我写的文章见过静态代理和动态代理,静态代理如AspectJ而动态代理又有JDK动态代理和CGLib动态代理两种
JDK动态代理是一种接口代理,而CGLib是一种类代理。具体我下面再区分
我以代码实列来讲,先说JDK动态代理,我之前说接口代理可以简单理解就是被代理的类必须是继承了一个接口,所以我们先声明一个接口:
下一步编写动态代理类,就是在这个类里面实现织入代码片段
每一个动态代理类都必须继承InvocationHandler该接口
然后是主程序
相关文档:http://www.cnblogs.com/xiaoluo501395377/p/3383130.html
首先说明两个问题,在前面我写的文章见过静态代理和动态代理,静态代理如AspectJ而动态代理又有JDK动态代理和CGLib动态代理两种
JDK动态代理是一种接口代理,而CGLib是一种类代理。具体我下面再区分
我以代码实列来讲,先说JDK动态代理,我之前说接口代理可以简单理解就是被代理的类必须是继承了一个接口,所以我们先声明一个接口:
public interface OriginalI { //测试方法 String test(); }而后实现该接口:
public class Original implements OriginalI { public String test(){ System.out.println("原测试类!"); return "test"; } }
下一步编写动态代理类,就是在这个类里面实现织入代码片段
import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; public class DynamicP implements InvocationHandler{ /* * 需要代理的真实对象 */ private Object subject; /* * 构造方法 */ public DynamicP(Object subject) { this.subject = subject; } @Override /* * @param org0 最终生成的代理对象 * @param org1 代理对象的某个方法 * @param org2 代理方法的参数 * */ public Object invoke(Object arg0, Method arg1, Object[] arg2) throws Throwable { // TODO Auto-generated method stub System.out.println("前侧环绕!"); arg1.invoke(subject,arg2); System.out.println("后侧环绕!"); return null; } }
每一个动态代理类都必须继承InvocationHandler该接口
然后是主程序
import java.lang.reflect.InvocationHandler; import java.lang.reflect.Proxy; public class Main { public static void main(String[] args) { // TODO Auto-generated method stub //需要被代理的对象ori Original ori = new Original(); //创建代理实列handler InvocationHandler handler = new DynamicP(ori); //代理对象OrI,实现目标类的接口 //OriginalI强制转化为该接口,因为ori.getClass().getInterfaces()获取了被代理对象的所有接口,强制转换至OriginalI接口 ,就可以调用相关接口方法
OriginalI OrI = (OriginalI)Proxy.newProxyInstance(ori.getClass().getClassLoader(), ori.getClass().getInterfaces(), handler);OrI.test();OrI.test2();}
相关文档:http://www.cnblogs.com/xiaoluo501395377/p/3383130.html
相关文章推荐
- 关于JDK动态代理的一点理解
- 深入理解JAVA JDK动态代理机制
- Java动态代理简单理解JDK
- 关于JDK动态代理的理解
- Java动态代理机制详解(JDK 和CGLIB,Javassist,ASM) (清晰,浅显)
- JAVA JDK 动态代理以及Mybatis的理解
- 深入理解java动态代理的两种实现方式(JDK/Cglib)
- Java之深入理解JDK动态代理
- 深入理解JAVA JDK动态代理机制
- Java动态代理机制详解(JDK 和CGLIB,Javassist,ASM) (清晰,浅显)
- 关于java中jdk中接口动态代理模式Proxy的剖析
- Java之代理(jdk静态代理,jdk动态代理,cglib动态代理,aop,aspectj)
- java动态代理(JDK和cglib)
- java动态代理(JDK和cglib)
- 动态代理--java jdk
- 深入理解JDK动态代理机制
- java动态代理(JDK和cglib)
- java动态代理(JDK和cglib)
- Java之代理(jdk静态代理,jdk动态代理,cglib动态代理,aop,aspectj)
- java动态代理的的理解