- 浏览: 136787 次
- 性别:
- 来自: 北京
文章分类
转自http://javatar.iteye.com/blog/814426
注意:但写new ArrayList时无法识别,必须全写为字符串形式,即new ArrayList.class.getName(),return (("+ifaces.getName()+")t)为同理
//用javassit得到动态代理 public T createJavassistBytecodeDynamicProxy(LoadBalance loadBalance,ConcurrentMap<String, T> map,Class ifaces){ try{ ClassPool mPool = new ClassPool(true); CtClass mCtc = mPool.makeClass(ifaces.getName() + "JavaassistProxy"); mCtc.addInterface(mPool.get(ifaces.getName())); mCtc.addConstructor(CtNewConstructor.defaultConstructor(mCtc)); mCtc.addField(CtField.make("public " + loadBalance.getClass().getName() + " sub;", mCtc)); mCtc.addField(CtField.make("public " + map.getClass().getName() + " map;", mCtc)); // mCtc.addField(CtField.make("public " + ArrayList.class.getName() + " list;", mCtc)); mCtc.addMethod(CtNewMethod.make("public Object getRealClient() { return (Object)sub.select(new "+ArrayList.class.getName()+"(map.values())); }",mCtc)); //获取接口的方法 for(Method method: ifaces.getMethods()){ Class returnType = method.getReturnType(); String modifiers = "public"; if(Modifier.PUBLIC==method.getModifiers()){ modifiers="public"; }else if(Modifier.PROTECTED==method.getModifiers()){ modifiers="protected"; }else if(Modifier.PRIVATE==method.getModifiers()){ modifiers="private"; } Class<?>[] parameter = method.getParameterTypes(); String params = ""; String ps = ""; for(Class param:parameter){ params += param.getName()+" "+param.getName()+","; ps+=param.getName()+","; } if(params.equals("")){ params = ""; ps=""; }else{ params=params.substring(0,params.length()); ps=ps.substring(0,ps.length()); } mCtc.addMethod(CtNewMethod.make(modifiers +" void "+method.getName()+"(String a,String b){ Object t=this.getRealClient(); return (("+ifaces.getName()+")t)."+method.getName()+"(a,b) ;}", mCtc)); // mCtc.addMethod(CtNewMethod.make("public int count() { return delegate.count(); }", mCtc)); } Class<?> pc = mCtc.toClass(); mCtc.debugWriteFile("/home/liguojun"); mCtc.writeFile("/home/liguojun"); T bytecodeProxy = (T) pc.newInstance(); Field filed = bytecodeProxy.getClass().getField("sub"); filed.set(bytecodeProxy, loadBalance); Field filed1 = bytecodeProxy.getClass().getField("map"); filed1.set(bytecodeProxy, map); return bytecodeProxy; }catch (Exception e){ e.printStackTrace(); } return null; }
注意:但写new ArrayList时无法识别,必须全写为字符串形式,即new ArrayList.class.getName(),return (("+ifaces.getName()+")t)为同理
发表评论
-
storm 安装
2013-09-02 16:32 3033------------------------------- ... -
java 类加载器学习
2012-12-14 10:47 1001引用1.自定义类加载器 public interface ... -
jackson 学习
2012-11-13 15:42 9831.json 转为object对象 public clas ... -
java 线程池 异常 处理 机制 分析
2012-10-31 19:34 2079public class ThreadTest { ... -
ThreadPoolExecutor 原理-- java 线程池
2012-08-08 19:14 1109整个ThreadPoolExecutor的任务处理有4 ... -
java 缓冲
2012-08-08 19:12 993import org.apache.log4j.Logge ... -
java 程序消耗 cpu 100% 查找方法
2012-05-16 14:38 17177问题原因:由于HashMap是非线程安全的,在多线程访问时,造 ... -
java io
2012-04-24 11:06 8861、按字节读取文件内容 2、按字符读取文件内容 3、按行读取 ... -
java 内省
2011-11-20 22:58 789java内省 -
系统常用工具类
2011-04-20 17:46 9791.ArithUtil.java ... -
spring 面向切面编程
2010-12-27 17:03 1055@Aspect public class AspectCoup ... -
jxl 写入excel
2010-11-10 13:52 9921.程序调用 ReportInterface report ... -
java 读取excel
2010-11-10 09:04 920package com.longtuo.client.act ... -
java 生成略缩图
2010-10-20 17:21 1177import java.awt.Graphics2D; imp ... -
XStream简单介绍
2010-09-10 15:44 1653创建能够序列化的类 这是一组简单的类。XStream能把这 ... -
java中对集合类的排序
2010-05-04 13:47 8681.第一种 public class User impleme ... -
Java 获取操作系统信息与Desktop类
2009-11-17 16:24 1348import java.util.Properties; ... -
java 事物处理
2009-10-15 10:52 1402public boolean deleteSchedule ...
相关推荐
动态代理是一种常见的设计模式,它在Java开发中广泛应用。通过动态代理,我们可以在运行时生成代理类,用于代理真实对象的方法调用。这种代理机制允许我们在不修改原始代码的情况下,对原始对象的行为进行扩展、增强...
jdk动态代理--适合企业级开发,但是它要求必须面向接口编程,假如目标类没有实现接口,则没办法代理这个类。 cglib代理, 1.cglib(Code Generation Library)是一个强大的,高性能,高质量的Code生成类库。它可以在...
动态代理是一种设计模式,它允许在运行时为对象创建代理,并在代理对象上执行方法调用。代理对象可以拦截对真实对象的访问,并允许在调用前后插入附加逻辑。这种设计模式可以用于横切关注点的集中处理,如日志记录、...
本文介绍了动态代理为实现许多常见设计模式提供了替代的动态机制。虽然这些模式不使用动态代理,只用普通的类就能够实现,但是在...除了最关注性能的应用程序之外,动态代理方式可能比手写或机器生成stub的方式更可取。
* * * * JDK动态代理 JDK动态代理 JDK动态代理是通过java.lang.reflect.Proxy 类来实现的,我们可以调用Proxy类的newProxyInstance()方法来创建代理对象。对于使用业务接口的类,Spring默认会使用JDK动态代理来实现...
Android动态加载Apk-插件化技术(动态代理方案) 一. 什么是插件化 1. 主App(宿主App)加载插件apk的实现 2. 每个业务组件模块形成一个独立的Apk, 然后通过主App动态加载部署业务组件模块Apk的一种方案 二.插件化的...
CGLIB是一个强大的、高性能的代码生成库。它被广泛使用在基于代理的AOP框架(例如Spring AOP和dynaop)提供方法拦截。Hibernate作为最流行的ORM工具也同样使用CGLIB库来代理单端关联(集合懒加载除外,它使用另外一...
在别人编译的 live.2013.11.15_VS2012 代码基础上修改代理服务那模块,将代理端口参数化,实现 流媒体代理固定端口为 554或8554的限制。
Java动态代理文档解释+案例代码实现。充分的体现了企业化思想。此案例使用动态代理实现了某个业务对象的性能分析。可商用!设置100积分谢谢。整理不易
简介: 本资源将深入探讨Spring框架中使用的两种关键...JDK动态代理与CGLib的比较: 我们将比较这两种动态代理方式的优劣势,以帮助您选择适合您项目需求的代理方式。您将了解它们在性能、可用性和适用场景方面的差异。
提出一种基于Kriging代理模型的动态云任务调度方法。通过对云任务在不同资源组合下的性能表现进行Kriging代理模型建模并优化,从而得到对应于该云任务的最优资源分配方案;利用云平台的API,可动态对该云任务实施...
1.6 使用动态内容缓存 1.7 使用数据缓存 1.8 将动态内容静态化 1.9 更换Web服务器软件 1.1 页面组件分离 1.11 合理部署服务器 1.12 使用负载均衡 1.13 优化数据库 1.14 考虑可扩展性 1.15 减少视觉等待 第...
1.6 使用动态内容缓存 1.7 使用数据缓存 1.8 将动态内容静态化 1.9 更换Web服务器软件 1.10 页面组件分离 1.11 合理部署服务器 1.12 使用负载均衡 1.13 优化数据库 1.14 考虑可扩展性 1.15 减少视觉等待 ...
从多个方面、多个角度进行了全面的阐述,涵盖了Web站点性能优化的几乎所有内容,包括数据的网络传输、服务器并发处理能力、动态网页缓存、动态网页静态化、应用层数据缓存、分布式缓存、Web服务器缓存、反向代理缓存...
1.6 使用动态内容缓存 1.7 使用数据缓存 1.8 将动态内容静态化 1.9 更换Web服务器软件 1.1 页面组件分离 1.11 合理部署服务器 1.12 使用负载均衡 1.13 优化数据库 1.14 考虑可扩展性 1.15 减少视觉等待 第...
Nginx在做反向代理时,能够提供性能稳定并且灵活配置的转发功能。Nginx可以根据不同的正则匹配,采取不同的转发策略,比如图片文件结尾的走文件服务器,动态页面走web服务器。Nginx还对可以对返回结果进行异常判断,...
在介绍了移动代理后,主要讨论了将移动代理用在这种新技术运用到路由算法中去,并提出了一种全新的基于移动代理的动态路由算法。分析了当今几种路由算法的不足和研究了移动代理优越性的基础上,提出了一种基于移动...
从多个方面、多个角度进行了全面的阐述,几乎涵盖了Web站点性能优化的所有内容,包括数据的网络传输、服务器并发处理能力、动态网页缓存、动态网页静态化、应用层数据缓存、分布式缓存、Web服务器缓存、反向代理缓存...
从多个方面、多个角度进行了全面的阐述,几乎涵盖了Web站点性能优化的所有内容,包括数据的网络传输、服务器并发处理能力、动态网页缓存、动态网页静态化、应用层数据缓存、分布式缓存、Web服务器缓存、反向代理缓存...