java 动态修改方法上的注解值

标签: 方法 注解 动态修改 方法注解 类注解
8人阅读 评论(0) 收藏 举报
分类:

https://blog.csdn.net/jiangzeyin_/article/details/78421178

上篇博客提起,动态修改类上注解的值。有博友问题如果修改方法上注解值,其实二者是相通的。

代码如下:

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * Created by jiangzeyin on 2018/4/15.
 */
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface testA {
    String value();
}
import java.lang.reflect.Field;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.util.Map;

/**
 * Created by jiangzeyin on 2018/4/15.
 */
public class test {

    @testA("a")
    public static void main(String[] args) throws Exception {
        Method method = test.class.getMethod("main", String[].class);
        testA testA = method.getAnnotation(testA.class);
        if (testA == null)
            throw new RuntimeException("please add testA");
        InvocationHandler invocationHandler = Proxy.getInvocationHandler(testA);
        Field value = invocationHandler.getClass().getDeclaredField("memberValues");
        value.setAccessible(true);
        Map<String, Object> memberValues = (Map<String, Object>) value.get(invocationHandler);
        String val = (String) memberValues.get("value");
        System.out.println("改变前:" + val);
        val = "b";
        memberValues.put("value", val);
        System.out.println("改变后:" + testA.value());

    }
}

运行结果:
这里写图片描述

查看评论

Java注解

-
  • 1970年01月01日 08:00

java 使用javassist 动态修改注解的值

如下实例: @Test public void aetTestCaseAtrributes() throws NotFoundException { ClassPool pool = C...
  • wangxin1982314
  • wangxin1982314
  • 2017-02-23 19:29:56
  • 2551

Java 使用动态代理来动态修改注解值

java 中定义注解都是在编写代码时,如果我们想在运行中根据某个条件来修改注解的值。是无法注解操作的,但是通过动态代理是可以实现的。这里需要用到的是Proxy 动态代理第一步得到代理实例:Invoca...
  • jiangzeyin_
  • jiangzeyin_
  • 2017-11-02 09:32:17
  • 795

Java运行时改变注解值

可能有人会问为什么要在运行是改变注解值?有什么应用场景?场景:士兵表: 士兵日志表: 这里我用的是mysql,在公司开发用的是mysql,对每个主键都使用了sequence。从上面的字段可...
  • Crabime
  • Crabime
  • 2017-07-26 00:17:13
  • 1060

JAVAssist---动态修改注解

​ITOOV3.0开始了,需要研究一些技术难点,先来说一个我觉得比较有趣的技术点吧,需求是这样的,我们需要动态的切换数据源,又由于我们是通过实体单元的注入来完成的,实体单元是通过注解的形式注入的,这样...
  • jly4758
  • jly4758
  • 2015-03-31 09:26:30
  • 13075

动态修改实体class类注释中的值

针对有时在开发中遇到需要修改注释中值得问题,可以调用此封装的类进行修改...
  • WOSHITANGWENLE
  • WOSHITANGWENLE
  • 2016-11-17 12:11:01
  • 1216

javassist----动态修改注解

1、为什么要动态修改注解? @Table(name = "pay_flow") public class PayFlowDB { @Id(insertable = true) @Co...
  • xiaodoukuaile
  • xiaodoukuaile
  • 2016-10-09 16:24:41
  • 682

java 类,变量,方法上注解值的获取

首先定义三个注解类, 分别适用于类,成员变量, 方法 @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) public @in...
  • qq_24551315
  • qq_24551315
  • 2016-04-23 18:31:11
  • 8056

Java 注解入门实例 && 注解传参

参考 概念:java提供了一种原程序中的元素关联任何信息和任何元数据的途径和方法 JDK内置系统注解: @Override 用于修饰此方法覆盖了父类的方法; @Deprecated 用于修饰已...
  • gg_gogoing
  • gg_gogoing
  • 2015-08-01 19:34:41
  • 7410

【java简单的注解使用方式】用注解代替设置属性方法

java 注解,从名字上看是注释,解释。但功能却不仅仅是注释那么简单。注解(Annotation) 为我们在代码中添加信息提供了一种形式化的方法,是我们可以在稍后 某个时刻方便地使用这些数据(通过 解...
  • ssh159
  • ssh159
  • 2016-10-12 14:59:55
  • 991
    个人资料
    专栏达人 持之以恒
    等级:
    访问量: 7万+
    积分: 1139
    排名: 4万+
    博客专栏
    联系方式
    最新评论