参考文档
这个写的挺全的,就是写的有点丑
javassist教程_不懂人情世故的博客-CSDN博客_java javassist转载 https://www.cnblogs.com/rickiyang/p/11336268.htmljavassist使用全解析Java 字节码以二进制的形式存储在 .class 文件中,每一个 .class 文件包含一个 Java 类或接口。Javaassist 就是一个用来 处理 Java 字节码的类库。它可以在一个已经编译好的类中添加新的方法,或者是修改已有的方法,并且不需要对字节码方面有深入的了解。同时也可以去生成一个新的类对象,通过完全手动的方式。. 使用 Javassist 创建一个https://blog.csdn.net/qq_42114504/article/details/123229026?spm=1001.2014.3001.5506
这个写的不多,但是实用
Javassist注解(Annotation)的使用:CXF WebService动态生成 - coshaho - 博客园设计一个对接系统,通过动态模型的增删改触发业务系统相应服务的调用。模型增删改方法动态发布为WebService服务。WebService服务采用CXF发布,动态类生成采用Javassist。由于Webhttps://www.cnblogs.com/coshaho/p/5105545.html
用来测试的类
最终结果
注:方法有参数,才会有参数注解
//获取类池ClassPool classPool = ClassPool.getDefault();CtClass ctClass = null;try {//获取类ctClass = classPool.getCtClass("aa.bb.cc.AAAA");//获取方法CtMethod method = ctClass.getDeclaredMethod("bbb");ClassFile classFile = ctClass.getClassFile();ConstPool constPool = classFile.getConstPool();// 添加类注解AnnotationsAttribute bodyAttr = new AnnotationsAttribute(constPool, AnnotationsAttribute.visibleTag);Annotation bodyAnnot = new Annotation(Controller.class.getName(), constPool);bodyAttr.addAnnotation(bodyAnnot);classFile.addAttribute(bodyAttr);// 添加方法注解AnnotationsAttribute methodAttr = new AnnotationsAttribute(constPool, AnnotationsAttribute.visibleTag);Annotation methodAnnot = new Annotation(GetMapping.class.getName(), constPool);methodAttr.addAnnotation(methodAnnot);method.getMethodInfo().addAttribute(methodAttr);// 添加参数注解 注:参数注解,必须方法有参数才会生成ParameterAnnotationsAttribute parameterAtrribute = new ParameterAnnotationsAttribute(constPool, ParameterAnnotationsAttribute.visibleTag);Annotation paramAnnot = new Annotation(RequestBody.class.getName(), constPool);Annotation[][] paramArrays = new Annotation[1][1];paramArrays[0][0] = paramAnnot;parameterAtrribute.setAnnotations(paramArrays);method.getMethodInfo().addAttribute(parameterAtrribute);/*将修改后的CtClass加载至当前线程的上下文类加载器中,CtClass的toClass方法是通过调用本方法实现。需要注意的是一旦调用该方法,则无法继续修改已经被加载的class;通过类加载器加载该CtClass。*/ctClass.toClass();//根据CtClass生成 .class 文件ctClass.writeFile("D:\\projectDemo\\swagger-aotu-demo\\silence-spring-auto\\src\\main\\java\\aa\\bb\\cc\\bb");} catch (Exception e) {e.printStackTrace();}