spring boot 使用有註解的類中的靜態方法
阿新 • • 發佈:2019-01-11
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);