Javassist动态生成类并实现接口

步骤:

        一、获取类池(这个类池就是给我们生成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

你可能感兴趣的:(java,开发语言)