java

位置:IT落伍者 >> java >> 浏览文章

Java程序性能优化-代理模式(4)


发布日期:2018年05月18日
 
Java程序性能优化-代理模式(4)

代理模式(

在这个切入对象的基础上可以生成动态代理

public static IDBQuery createCglibProxy(){

Enhancer enhancer = new Enhancer()

enhancersetCallback(new CglibDbQueryInterceptor())

//指定切入器定义代理类逻辑

enhancersetInterfaces(new Class[] { IDBQueryclass })

//指定实现的接口

IDBQuery cglibProxy = (IDBQuery) enhancercreate()

//生成代理类的实例

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 realrequest()

}

}

以这个Handler为基础创建动态Javasssit代理

public static IDBQuery createJavassistDynProxy() throws Exception {

ProxyFactory proxyFactory = new ProxyFactory()

proxyFactorysetInterfaces(new Class[] { IDBQueryclass })//指定接口

Class proxyClass = proxyFactorycreateClass()

IDBQuery javassistProxy = (IDBQuery) proxyClassnewInstance()

//设置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 = mPoolmakeClass(IDBQueryclassgetName() + Javaassist

BytecodeProxy

//需要实现的接口

mCtcaddInterface(mPoolget(IDBQueryclassgetName()))

//添加构造函数

mCtcaddConstructor(CtNewConstructordefaultConstructor(mCtc))

//添加类的字段信息使用动态Java代码

mCtcaddField(CtFieldmake(public + IDBQueryclassgetName() +

real; mCtc))

String dbqueryname=DBQueryclassgetName()

//添加方法这里使用动态Java代码指定内部逻辑

mCtcaddMethod(CtNewMethodmake(public String request() { if(real==

null)real=new +dbqueryname+()return realrequest() } mCtc))

//基于以上信息生成动态类

Class pc = mCtctoClass()

//生成动态类的实例

IDBQuery bytecodeProxy = (IDBQuery) pcnewInstance()

return bytecodeProxy;

}

返回目录Java程序性能优化让你的Java程序更快更稳定

编辑推荐

Java程序设计培训视频教程

JEE高级框架实战培训视频教程

JME移动开发实战教学视频

Visual C++音频/视频技术开发与实战

Oracle索引技术

ORACLEG数据库开发优化指南

               

上一篇:Java程序性能优化-代理模式(3)

下一篇:Java程序性能优化-代理模式(5)