package com.zhangguo.Spring041.aop03;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.util.Random;
/**
* 动态代理类
*/
public class DynamicProxy implements InvocationHandler {
//被代理的对象
Object targetObject;
/**
* 获得被代理后的对象
* @param object 被代理的对象
* @return 代理后的对象
*/
public Object getProxyObject(Object object){
this.targetObject=object;
return Proxy.newProxyInstance(
targetObject.getClass().getClassLoader(), //类加载器
targetObject.getClass().getInterfaces(), //获得被代理对象的所有接口
this); //InvocationHandler对象
//loader:一个ClassLoader对象,定义了由哪个ClassLoader对象来生成代理对象进行加载
//interfaces:一个Interface对象的数组,表示的是我将要给我需要代理的对象提供一组什么接口,如果我提供了一组接口给它,那么这个代理对象就宣称实现了该接口(多态),这样我就能调用这组接口中的方法了
//h:一个InvocationHandler对象,表示的是当我这个动态代理对象在调用方法的时候,会关联到哪一个InvocationHandler对象上,间接通过invoke来执行
}
/**
* 当用户调用对象中的每个方法时都通过下面的方法执行,方法必须在接口
* proxy 被代理后的对象
* method 将要被执行的方法信息(反射)
* args 执行方法时需要的参数
*/
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
//被织入的内容,开始时间
long start=System.currentTimeMillis();
lazy();
//使用反射在目标对象上调用方法并传入参数
Object result=method.invoke(targetObject, args);
//被织入的内容,结束时间
Long span= System.currentTimeMillis()-start;
System.out.println("共用时:"+span);
return result;
}
//模拟延时
public void lazy()
{
try {
int n=(int)new Random().nextInt(500);
Thread.sleep(n);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
动态代理是一种在运行时创建代理对象的技术,通常用于实现AOP(面向切面编程)中的横切关注点,比如日志、性能监控等。以下是几种常见的动态代理实现: JDK动态代理: Java通过java.lang.reflect.Proxy类提供了一种简单的动态代理机制。首先需要获取到目标对象的Class对象,然后创建InvocationHandler接口的实例,这个实例包含对目标方法的实际处理逻辑。最后,通过Proxy.newProxyInstance()方法结合这两个组件生成代理对象。 CGLIB (Class-Graph Library): 这是一个强大的字节码库,可以修改已加载的类并添加新的方法或属性。CGLIB基于继承的方式创建代理,它生成的是目标类的子类,并在子类中拦截方法的调用。 Spring AOP (面向切面编程框架): Spring框架内建了支持动态代理的功能,使用@AspectJ注解可以轻松地创建AOP代理。Spring AOP既支持JDK动态代理也支持CGLIB,会根据目标类是否实现了接口选择合适的底层技术。 Guice / Dagger: 如果你在使用Google的依赖
资源推荐
资源详情
资源评论















收起资源包目录





































































































共 109 条
- 1
- 2
资源评论


shangjg3
- 粉丝: 3664
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 刍议互联网+时代影视节目编导社会责任.docx
- 互联网时代电子商务试题卷与答案解析(1).doc
- 软件工程电子教案大同大学(2)公开课一等奖优质课大赛微课获奖课件.pptx
- 南开大学2021年9月《DirectX程序设计》作业考核试题及答案参考1.docx
- 东北大学2021年9月《计算机基础》作业考核试题及答案参考3.docx
- 计算机网络技术与应用张玲等主编电子教案和教学指南公开课一等奖优质课大赛微课获奖课件.pptx
- C语言旅馆信息管理系统.doc
- 研究生作业_基于遗传算法优化多元多目标函数的MATLAB实现.doc
- 人工智能对会计工作的影响研究.docx
- 基于测试路径的Web系统自动化测试方法研究的开题报告.docx
- 工程项目管理软件在建筑工程项目中的分析及应用的开题报告.docx
- 教师信息技术培训教程之Flash-课件制作(高级).doc
- 输配电及其用电工程的自动化运行维护分析(1).docx
- AB安全PLC基础资料.ppt
- 浅谈高校计算机实验室管理与维护.docx
- 基于单片机的可调电子钟的设计.doc
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈



安全验证
文档复制为VIP权益,开通VIP直接复制
