Java动态生成类和实例,并注入方法操作示例

  

本文实例讲述了Java动态生成类和实例,并注入方法。分享给大家供大家参考,具体如下:

  

Java官方支持的,必须要有接口才行

        进口java.lang.reflect.Constructor;   进口java.lang.reflect.InvocationHandler;   进口java.lang.reflect.Method;   进口java.lang.reflect.Proxy;   进口java.util.LinkedList;   进口并不知道;   进口java.util.Random;/* *   * @author大卫叮   *   */接口IJavaGen {   int getRandomInt ();   空白printClassInfo ();   }   抽象类JavaGen实现IJavaGen {   保护List,calledMethods=new LinkedList<的在();//属性   公共int getRandomInt(){//获得一个随机整数   返回新的随机().nextInt (10000);   }   公共抽象空白printClassInfo ();   }   类JavaGenHandler实现InvocationHandler {   私人JavaGen mTarget;   公共JavaGenHandler (JavaGen JavaGen) {   mTarget=javaGen;   }//动态注入   @Override   公共对象调用对象obj,方法方法,对象[]参数)抛出Throwable {   对象ret=零;   字符串名称=method.getName ();   如果(name.equals (“getRandomInt”)){//拦截getRandomInt   ret=方法。调用(mTarget params);//调用基方法   系统。println(“打印随机整数:" + ret);   }else if (name.equals (“printClassInfo”)){//打印类信息   系统。println(“类:”+ obj.getClass ());   方法。调用(mTarget params);   }   mTarget.calledMethods.add(名称);//改变属性   返回受潮湿腐烂;   }   }   公开课JavaCodeGen {   公共静态void main (String [] args) {   尝试{   Class<& # 63;比;genClass=Proxy.getProxyClass (IJavaGen.class.getClassLoader (), IJavaGen.class);   Constructor<& # 63;比;缺点=genClass.getConstructor (InvocationHandler.class);   JavaGen目标=new JavaGen () {   @Override   公共空间printClassInfo () {   系统。println(“我要实现这个方法! !”);   }   };   IJavaGen javaGen=(IJavaGen) cons.newInstance(新JavaGenHandler(目标);   javaGen.getRandomInt ();   javaGen.printClassInfo ();   System.out.println (target.calledMethods);   }捕捉(异常e) {   e.printStackTrace ();   }   }   }      

运行结果:

  
  

打印随机整数:8143
  类:类演示。美元Proxy0
  我要实现这个方法! !
  [getRandomInt, printClassInfo]

     

更多关于java算法相关内容感兴趣的读者可查看本站专题:《java面向对象程序设计入门与进阶教程》、《java数据结构与算法教程》、《java操作DOM节点技巧总结》,《java文件与目录操作技巧汇总》和《java缓存操作技巧汇总》

  

希望本文所述对大家java程序设计有所帮助。

Java动态生成类和实例,并注入方法操作示例