Java動態修改註解

import cn.afterturn.easypoi.excel.annotation.Excel;
import io.swagger.annotations.ApiModelProperty;

public class Animal {

    @ApiModelProperty(value = "年齡", position = 3)
//    @Export(name = "年齡", order = 1, width = 20)
    @Excel(name = "年齡", orderNum = "1")
    public String age;

}
import javassist.ClassPool;
import javassist.CtClass;
import javassist.CtField;
import javassist.NotFoundException;
import javassist.bytecode.*;
import javassist.bytecode.annotation.Annotation;
import javassist.bytecode.annotation.StringMemberValue;

import java.util.Arrays;


public class Main {
    public static void main(String[] args) throws NotFoundException {
        ClassPool pool = ClassPool.getDefault();
        CtClass ct = pool.get("Animal");
        CtField cf = ct.getField("age");
        FieldInfo fieldInfo = cf.getFieldInfo();
        System.out.println("屬性名稱: " + cf.getName());

        System.out.println("***********************************");
        AnnotationsAttribute attribute = (AnnotationsAttribute) fieldInfo.getAttribute(AnnotationsAttribute.visibleTag);
        ConstPool cp = fieldInfo.getConstPool();
        Annotation annotation = new Annotation("Export(name=\"年齡\", order=1, width=20)", cp);

        attribute.addAnnotation(annotation);
        System.out.println(attribute);
        Annotation[] annotations = attribute.getAnnotations();
        System.out.println(Arrays.toString(annotations));
        System.out.println(annotation);
        System.out.println("***********************************");


        ConstPool cp = fieldInfo.getConstPool();
        AnnotationsAttribute attribute2 = new AnnotationsAttribute(cp, AnnotationsAttribute.visibleTag);
        System.out.println(attribute2);
//        Annotation annotation = new Annotation("Export", cp);
        System.out.println(annotation);
        annotation.addMemberValue("unitName", new StringMemberValue("basic-entity", cp));
        attribute2.setAnnotation(annotation);

        Annotation annotation2 = attribute2.getAnnotation("Export");
        String text = ((StringMemberValue) annotation2.getMemberValue("unitName")).getValue();
        System.out.println("修改後的註解名稱==:" + text);

        AnnotationsAttribute annotationsAttribute = new AnnotationsAttribute(cp, AnnotationsAttribute.visibleTag);
        System.out.println(annotationsAttribute.getAnnotation("io.swagger.annotations.ApiModelProperty"));
        System.out.println(annotationsAttribute);

    }
}
    /**
     * 功能,動態的給類屬性添加註解
     *
     * @param className 類名
     * @param attributeName 類屬性
     * @param typeName 註解類型
     */
    public static void addAnnotation(String className, String attributeName, String typeName) {
        try {
            ClassPool pool = ClassPool.getDefault();
            CtClass ct = pool.get(className);
            CtField cf = ct.getField(attributeName);
            FieldInfo fieldInfo = cf.getFieldInfo();
            AnnotationsAttribute attribute = (AnnotationsAttribute) fieldInfo.getAttribute(AnnotationsAttribute.visibleTag);
            ConstPool cp = fieldInfo.getConstPool();
            Annotation annotation = new Annotation(typeName, cp);
            System.out.println(annotation);
            attribute.addAnnotation(annotation);
            System.out.println(Arrays.toString(attribute.getAnnotations()));
        } catch (NotFoundException e) {
            log.error("此類不存在", e);
        }
    }

 

https://blog.csdn.net/jly4758/article/details/44774217

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章