Java 通过反射修改 static 变量的值

分类: JAVA 评论(0) 625 阅读 2018-12-24 23:41 ZooM查看

摘要 遇到一个特殊情况需要修改引入框架中某个类定义的static变量的值,但是又不方便编译源码就行修改;最后通过反射就行修改
JAVA


  在项目中引入了第三方框架,其中某个功能制定的URL我们需要重新指定值;想到两种方法,第一种呢直接编译源码修改后重新引入;第二种通过JAVA反射直接修改该值。因为Maven的关系,如果使用第一种还需上传私服,这样操作显然太过麻烦,那我们就使用第二种方案

public class AccessTokenApi {

    // "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET";
    private static String url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential";
}

上面是我们需要反射修改的类及变量定义

public static void reflectAccessTokenRequestUrl() {
    try {
        AccessTokenApi tokenApi = new AccessTokenApi();
        // 反射获取字段, name成员变量
        Field urlField = tokenApi.getClass().getDeclaredField("url");
        // 由于name成员变量是private, 所以需要进行访问权限设定
        urlField.setAccessible(true);

        String wechatProxyUrlAccessTokenUrl = GridProperties.WECHAT_PROXY_URL +
                "?wechatUrl=https://api.weixin.qq.com/cgi-bin/token&grant_type=client_credential&requestType=wechatToken";
        // 使用反射进行赋值        
        urlField.set(tokenApi, wechatProxyUrlAccessTokenUrl);
    } catch (Exception e) {
        e.printStackTrace();
    }
}


QQ联系作者 微信联系作者
评论0
提交评论

关  于

该站属于个人博客,技术架构: JFinal + Beetl + Bootstrap

功能以后会继续完善……

QQ:841359731