关于java JDK动态代理的浅显理解
来源:互联网 发布:银河战士 知乎 编辑:程序博客网 时间:2024/06/16 03:46
首先我是在用spring AOP的时候才认识到java中的动态代理,在这里我稍微谈一谈我自己对JDK动态代理的理解
首先说明两个问题,在前面我写的文章见过静态代理和动态代理,静态代理如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 stubSystem.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 //需要被代理的对象oriOriginal ori = new Original(); //创建代理实列handlerInvocationHandler 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
阅读全文
0 0
- 关于java JDK动态代理的浅显理解
- 关于JDK动态代理的理解
- 关于JDK动态代理的一点理解
- Java动态代理技术-我的浅显认识
- JAVA JDK 动态代理以及Mybatis的理解
- <JAVA>通过JDK创建动态代理的理解
- Java动态代理机制详解(JDK 和CGLIB,Javassist,ASM) (清晰,浅显)
- Java动态代理机制详解(JDK 和CGLIB,Javassist,ASM) (清晰,浅显)
- 深入理解JAVA JDK动态代理机制
- 深入理解JAVA JDK动态代理机制
- Java动态代理简单理解JDK
- Java的JDK动态代理
- 深入理解 jdk 动态代理的实现
- JDK的动态代理实现原理理解
- JDK 动态代理的简单理解
- JDK 动态代理的简单理解
- jdk动态代理的初步理解
- 关于Java的动态代理的初步理解
- 发送邮件
- hdu1027之简单递归
- const与指针
- 小程序管理新闻资讯分类-微信小程序视频教程27
- 输入一个一维数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。
- 关于java JDK动态代理的浅显理解
- DPM算法 原理 实验分析 PPT详解 (17年9月份小专题的整理)
- 计蒜客15 单独的数字 位运算
- 最小生成树之kruskal算法概念与实现
- 读书笔记-《字符串》
- 2017 ACM-ICPC 亚洲区(乌鲁木齐赛区)网络赛 E: Half-consecutive Numbers
- 51Nod
- servlet学习笔记-第一天
- Tyvj1998