1. 程式人生 > >spring boot 使用有註解的類中的靜態方法

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\\20180116
wxpaycertificate\\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);