動(dòng)態(tài)修改注解值

工作中遇到需要修改注解屬性值的場(chǎng)景,記錄下修改方法。

    // 默認(rèn) 字段 S_State 注解 isNotNull() 的值是 true(不能為空),修改為 false(可以為空),以便通過(guò)validate校驗(yàn)
    public static void main(String[] args) throws Exception {
        BORfKnowledgeBaseBean bean = new BORfKnowledgeBaseBean();
        bean.setTenantId(1000000000);
        bean.setBaseCode("TEST_RULE_4");
        bean.setBaseName("規(guī)則引擎測(cè)試4");
        bean.setNotes("規(guī)則引擎測(cè)試4");
        bean.setState("");// ~~State賦值為空字符串~~
        bean.setRemarks("");

        // 獲取BORfKnowledgeBaseBean的 S_State 字段所有屬性
        Field field = bean.getClass().getDeclaredField("S_State");
        // 獲取S_State字段上的ParamsAnn注解實(shí)例
        ParamsAnn ann = field.getAnnotation(ParamsAnn.class);
        // 獲取ParamsAnn注解實(shí)例的 isNotNull 屬性值
        Object stateAnnValue = ann.isNotNull();
        Object annValue = ann.isNotNull();
        System.out.println("修改前....." + annValue);

        // 獲取 ann 這個(gè)代理實(shí)例所持有的 InvocationHandler
        InvocationHandler invocationHandler = Proxy.getInvocationHandler(ann);
        // 獲取 AnnotationInvocationHandler 的 memberValues 字段
        Field hField = invocationHandler.getClass().getDeclaredField("memberValues");
        hField.setAccessible(true);
        Map<String, Object> memberValues = (Map<String, Object>) hField.get(invocationHandler);
        memberValues.put("isNotNull", true);

        // 獲取ParamsAnn注解實(shí)例的 isNotNull 屬性值
        annValue = ann.isNotNull();
        System.out.println("修改后....." + annValue);

        BeanHelper.validate(bean);

    }

輸出結(jié)果:
修改前.....true
修改后.....false
可以看到修改后Bean中不能為空的State字段可以設(shè)定為空了。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容