Java 动态生成类和实例, 并注入方法
来源:互联网 发布:教学状态数据分析报告 编辑:程序博客网 时间:2024/06/03 13:13
Java官方支持的, 必须要有接口才行
import java.lang.reflect.Constructor;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Proxy;import java.util.LinkedList;import java.util.List;import java.util.Random;/** * @author David Ding * */interface IJavaGen {int getRandomInt();void printClassInfo();}abstract class JavaGen implements IJavaGen {protected List<String> calledMethods = new LinkedList<>(); // propertypublic int getRandomInt() { // Get a random integerreturn new Random().nextInt(10000);}public abstract void printClassInfo();}class JavaGenHandler implements InvocationHandler {private JavaGen mTarget;public JavaGenHandler(JavaGen javaGen) {mTarget = javaGen;}// 动态注入@Overridepublic Object invoke(Object obj, Method method, Object[] params) throws Throwable {Object ret = null;String name = method.getName();if (name.equals("getRandomInt")) { // intercept the getRandomIntret = method.invoke(mTarget, params); // call the base methodSystem.out.println("Print random int: " + ret);} else if (name.equals("printClassInfo")) { // print class infoSystem.out.println("Class: " + obj.getClass());method.invoke(mTarget, params);}mTarget.calledMethods.add(name); // change the propertyreturn ret;}}public class JavaCodeGen {public static void main(String[] args) {try {Class<?> genClass = Proxy.getProxyClass(IJavaGen.class.getClassLoader(), IJavaGen.class);Constructor<?> cons = genClass.getConstructor(InvocationHandler.class);JavaGen target = new JavaGen() {@Overridepublic void printClassInfo() {System.out.println("I have to implement this method! fuck!");}};IJavaGen javaGen = (IJavaGen) cons.newInstance(new JavaGenHandler(target));javaGen.getRandomInt();javaGen.printClassInfo();System.out.println(target.calledMethods);} catch (Exception e) {e.printStackTrace();}}}
0 0
- Java 动态生成类和实例, 并注入方法
- Java 动态的创建注入代码,注入方法给类或者接口并通过反射调用
- Spring实现动态注入并按照类别获取相应实例的方法
- spring配置-mybatis的mapper接口动态代理生成实现类并注入
- Java动态调用类方法实例
- Java如何根据类名和方法名创建类的实例,并调用对应方法?
- Groovy方法拦截,注入,合成,委托和动态类
- java生成java文件并动态编译
- android和html交互--动态注入方法
- Yii2 自动加载,依赖注入,获取实例,动态调用方法
- java动态加载jar包,并运行其中的类和方法
- java动态加载jar包,并运行其中的类和方法
- java动态加载jar包,并运行其中的类和方法
- java程序动态加载java源文件并调用类方法
- java中 类方法和实例方法
- java中的类方法和实例方法
- java 实例方法和类方法比较
- rails动态定义实例方法和类方法
- linux学习笔记--mysqlimport命令
- Dialog 1.08 SDK Pxp reporter 代码走读 - 2
- Jenkins+Maven+SVN+Tomcat自动部署
- signapk.jar利用eclipse签名apk文件
- 大致工作流程
- Java 动态生成类和实例, 并注入方法
- Android 打开各种文件(setDataAndType)——apk安装方法
- HDU oj典型dp
- springmvc+mybatis整合SSM案例教程
- 框架之Struts2 处理结果类型、struts.xml标签属性及验证输入的方式
- xcode自带的NSJSONSerialization解析中文就会失败
- 数据科学(data science)概览
- iOS9怎么在AlertControler 的提示框点击确定实现更改
- linux作业(1)