步骤:
一、获取类池(这个类池就是给我们生成class的)
二、制造类
三、制造接口
四、添加接口到类中
六、实现接口中的方法
七、制造方法
八、将方法添加到类中
九、在内存中生成class,同时将生成的类加载到JVM中
测试样例
@Test
public void testGenerateImpl() throws Exception{
//获取类池,这个类池就是给我们生成class的
ClassPool pool = ClassPool.getDefault();
//制造类
CtClass ctClass = pool.makeClass("com.bank.dao.impl.AccountDaoImpl");
//制造接口
CtClass ctInterface = pool.makeInterface("com.bank.dao.AccountDao");
//添加接口到类中
ctClass.addInterface(ctInterface);
//实现接口中的方法
//制造方法
String methodCode="public void delete(){System.out.println(\"hello delete\");}";
CtMethod ctMethod= CtMethod.make(methodCode, ctClass);
//将方法添加到类中
ctClass.addMethod(ctMethod);
//在内存中生成class,同时将生成的类加载到JVM中
//这里可以直接给你返回class
Class<?> clazz = ctClass.toClass();
//这个类实现了这个接口,直接可以返回接口类型,再让返回的接口对象调接口当中的方法
AccountDao accountDao = (AccountDao) clazz.newInstance();
accountDao.delete();
}
测试结果:hello delete
【注意】高版本的jdk会出现异常
解决方法:修改两个参数
--add-opens java.base/java.lang=ALL-UNNAMED
--add-opens java.base/sun.net.util=ALL-UNNAMED