知识大全 Java程序性能优化-代理模式(4)
Posted 知
篇首语:撒网要撒迎头网,开船要开顶风船。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Java程序性能优化-代理模式(4)相关的知识,希望对你有一定的参考价值。
Java程序性能优化-代理模式(4) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
代理模式( )
在这个切入对象的基础上 可以生成动态代理
public static IDBQuery createCglibProxy()
Enhancer enhancer = new Enhancer()
enhancer setCallback(new CglibDbQueryInterceptor())
//指定切入器 定义代理类逻辑
enhancer setInterfaces(new Class[] IDBQuery class )
//指定实现的接口
IDBQuery cglibProxy = (IDBQuery) enhancer create()
//生成代理类的实例
return cglibProxy;
使用Javassist生成动态代理可以使用两种方式 一种是使用代理工厂创建 另一种通过使用动态代码创建 使用代理工厂创建时 方法与CGLIB类似 也需要实现一个用于代理逻辑处理的Handler:
public class JavassistDynDbQueryHandler implements MethodHandler
IDBQuery real=null;
@Override
public Object invoke(Object arg Method arg Method arg Object[] arg )
throws Throwable
if(real==null)
real=new DBQuery()
return real request()
以这个Handler为基础 创建动态Javasssit代理
public static IDBQuery createJavassistDynProxy() throws Exception
ProxyFactory proxyFactory = new ProxyFactory()
proxyFactory setInterfaces(new Class[] IDBQuery class ) //指定接口
Class proxyClass = proxyFactory createClass()
IDBQuery javassistProxy = (IDBQuery) proxyClass newInstance()
//设置Handler处理器
((ProxyObject) javassistProxy) setHandler(new JavassistDynDbQuery Handler())
return javassistProxy;
Javassist使用动态Java代码创建代理的过程和前文的方法略有不同 Javassist内部可以通过动态Java代码 生成字节码 这种方式创建的动态代理可以非常灵活 甚至可以在运行时生成业务逻辑
public static IDBQuery createJavassistBytecodeDynamicProxy() throws Exception
ClassPool mPool = new ClassPool(true)
//定义类名
CtClass mCtc = mPool makeClass(IDBQuery class getName() + Javaassist
BytecodeProxy )
//需要实现的接口
mCtc addInterface(mPool get(IDBQuery class getName()))
//添加构造函数
mCtc addConstructor(CtNewConstructor defaultConstructor(mCtc))
//添加类的字段信息 使用动态Java代码
mCtc addField(CtField make( public + IDBQuery class getName() +
real; mCtc))
String dbqueryname=DBQuery class getName()
//添加方法 这里使用动态Java代码指定内部逻辑
mCtc addMethod(CtNewMethod make( public String request() if(real==
null)real=new +dbqueryname+ () return real request() mCtc))
//基于以上信息 生成动态类
Class pc = mCtc toClass()
//生成动态类的实例
IDBQuery bytecodeProxy = (IDBQuery) pc newInstance()
return bytecodeProxy;
返回目录 Java程序性能优化 让你的Java程序更快 更稳定
编辑推荐
Java程序设计培训视频教程
J EE高级框架实战培训视频教程
J ME移动开发实战教学视频
Visual C++音频/视频技术开发与实战
Oracle索引技术
cha138/Article/program/Java/gj/201311/27831相关参考
Java程序性能优化-代理模式(1) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
Java程序性能优化-代理模式(2) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
Java程序性能优化-代理模式(3) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
Java程序性能优化-代理模式(5) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
Java程序性能优化-代理模式(6) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
Java程序性能优化-业务代理模式(2)[1] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &
Java程序性能优化-业务代理模式(1)[1] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &
Java程序性能优化-业务代理模式(1)[2] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 这
Java程序性能优化-业务代理模式(2)[2] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! i
Java程序性能优化-装饰者模式(4) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!