知识大全 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)

Java程序性能优化-代理模式(1)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!   

知识大全 Java程序性能优化-代理模式(2)

Java程序性能优化-代理模式(2)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!   

知识大全 Java程序性能优化-代理模式(3)

Java程序性能优化-代理模式(3)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!   

知识大全 Java程序性能优化-代理模式(5)

Java程序性能优化-代理模式(5)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!   

知识大全 Java程序性能优化-代理模式(6)

Java程序性能优化-代理模式(6)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!   

知识大全 Java程序性能优化-业务代理模式(2)[1]

Java程序性能优化-业务代理模式(2)[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  &

知识大全 Java程序性能优化-业务代理模式(1)[1]

Java程序性能优化-业务代理模式(1)[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  &

知识大全 Java程序性能优化-业务代理模式(1)[2]

Java程序性能优化-业务代理模式(1)[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  这

知识大全 Java程序性能优化-业务代理模式(2)[2]

Java程序性能优化-业务代理模式(2)[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  i

知识大全 Java程序性能优化-装饰者模式(4)

Java程序性能优化-装饰者模式(4)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!