步骤:
一、获取类池(这个类池就是给我们生成class的)
二、制造类
三、制造方法
四、将方法添加到类中
五、在内存中生成class
六、类加载,创建对象【newInstance()方法】获取类中方法并执行
测试样例:
@Test
public void testGenerateFistClass() throws Exception {
//获取类池,这个类池就是给我们生成class的
ClassPool pool = ClassPool.getDefault();
//制造类
CtClass ctClass = pool.makeClass("com.dao.impl.AccountDaoImpl");
//制造方法
String methodCode="public void insert(){System.out.println(123);}";
CtMethod ctMethod= CtMethod.make(methodCode, ctClass);
//将方法添加到类中
ctClass.addMethod(ctMethod);
//在内存中生成class
ctClass.toClass();
//类加载
Class<?> clazz = Class.forName("com.dao.impl.AccountDaoImpl");
//创建对象Obj
Object obj = clazz.newInstance();
//获取AccountDaoImpl中的insert方法
Method insert = clazz.getDeclaredMethod("insert");
//调用insert方法
insert.invoke(obj);
}
测试结果:123
【注意】高版本的jdk会出现异常
解决方法:修改两个参数
--add-opens java.base/java.lang=ALL-UNNAMED
--add-opens java.base/sun.net.util=ALL-UNNAMED