本文实例讲述了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动态生成类和实例,并注入方法操作示例