spring boot 使用有注解的类中的静态方法

1. 在配置文件中加配置参数
#微信相关数据
wechat:
  mch_appid: abc122345677
  wx_secret: abcyyydffgdd7b95403552c2
  mchid: abc3asdfasd02
  key: Fasdf17Yasdfasd3asdf02
  url: https\://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers
  query_url: https\://api.mch.weixin.qq.com/mmpaymkttransfers/gettransferinfo
  sslFile: C:\\Users\\Administrator\\Desktop\\vym_doc\\20180116wxpaycertificate\\cert\\apiclient_cert.p12
  app_access_token_url: https\://api.weixin.qq.com/cgi-bin/token?grant_type\=client_credential&appid\=abc122345677&secret\=abcyyydffgdd7b95403552c2
  template_id_msg: x9cUUj_pIabcyyydffgdd7b95403552c2aYArs
2. 在程序中调用
@Component
public class WechatAppAccessToken {
    private final static String ACCESS_TOKEN = "access_token";
    private final static String EXPIRES_IN = "expires_in";

    private static WechatAppAccessToken wechatAppAccessToken;
    @Resource
    private RedisUtil redisUtil;
    @Value("${wechat.app_access_token_url}")
    public String appTokenUrl; // WEB端的URL

    @PostConstruct
    public void init() {
        wechatAppAccessToken = this;
        wechatAppAccessToken.redisUtil = this.redisUtil;
        wechatAppAccessToken.appTokenUrl = this.appTokenUrl;
    }

    /**
     * 获取微信公众号的accessToken
     *            企业微信公众号secret
     * @return
     * @throws Exception
     */
    @SuppressWarnings("unchecked")
    public static String getAppAccessToken(Boolean isValid) throws Exception {

        String accessTokenRds = wechatAppAccessToken.redisUtil.getValue(ACCESS_TOKEN+"_vym");
        if (!StringUtil.isEmpty(accessTokenRds, true) && accessTokenRds.length() > 20 && isValid)
            return accessTokenRds;
        else {
            String accessTokenStr = HttpClientUtil.sendJsonPost(wechatAppAccessToken.appTokenUrl, "");
            HashMap<String, Object> tokenMap = JsonUtil.json2bean(accessTokenStr, HashMap.class);
            accessTokenRds = (String) tokenMap.get(WechatAppAccessToken.ACCESS_TOKEN);
            if(StringUtil.isEmpty(accessTokenRds, true))
                return null;
            Integer expires_in = (Integer) tokenMap.get(WechatAppAccessToken.EXPIRES_IN);
            System.out.println("获取新的token:" + accessTokenRds);
            wechatAppAccessToken.redisUtil.setRedisWithTime(ACCESS_TOKEN+"_vym",  accessTokenRds,expires_in);
            return accessTokenRds;
        }

    }
}
3. 分析


  • 使用注解的时候,该类也必须要注解,否则不识别类内的注解
  • 由于类内的加载顺序问题,会预先加载静态成员变量,导致无法获取变量值。这时需要@PostConstruct来加载变量值。
  • 虽然该类有注解,但是调用的时候,可以直接用静态方法调用。

  • String accessToken = WechatAppAccessToken.getAppAccessToken(true);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值