Springboot 讀取自定義pro文件注入static靜態(tài)變量方式
Springboot 讀取pro文件注入static靜態(tài)變量
mailConfig.properties
#服務(wù)器 mail.host=smtp.qq.com #端口號 mail.port=587 #郵箱賬號 mail.userName=hzy_daybreak_lc@foxmail.com #郵箱授權(quán)碼 mail.passWord=vxbkycyjkceocbdc #時間延遲 mail.timeout=25000 #發(fā)送人 mail.emailForm=hzy_daybreak_lc@foxmail.com #發(fā)件人 mail.personal=華夏衣裳 #主題 mail.subject=同袍用戶激活 #內(nèi)容模板 mail.html=您的郵箱驗證碼為:
MailConfig.java
/* * @(#)MailConfig.java Created on 2019年9月11日 * Copyright (c) 2019 ZDSoft Networks, Inc. All rights reserved. * $Id$ */ package com.hxyc.config.properties; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.PropertySource; import org.springframework.stereotype.Component; /** * @author huangzy * @version $Revision: 1.0 $, $Date: 2019年9月11日 上午10:29:35 $ */ @Configuration @PropertySource(value = "classpath:config/mailConfig.properties", encoding = "UTF-8") @Component public class MailConfig { public static String host; public static Integer port; public static String userName; public static String passWord; public static String emailForm; public static String timeout; public static String personal; public static String html; public static String subject; /** * @return Returns the host. */ public static String getHost() { return host; } /** * @param host * The host to set. */ @Value("${mail.host}") public void setHost(String host) { MailConfig.host = host; } /** * @return Returns the port. */ public static Integer getPort() { return port; } /** * @param port * The port to set. */ @Value("${mail.port}") public void setPort(Integer port) { MailConfig.port = port; } /** * @return Returns the userName. */ public static String getUserName() { return userName; } /** * @param userName * The userName to set. */ @Value("${mail.userName}") public void setUserName(String userName) { MailConfig.userName = userName; } /** * @return Returns the passWord. */ public static String getPassWord() { return passWord; } /** * @param passWord * The passWord to set. */ @Value("${mail.passWord}") public void setPassWord(String passWord) { MailConfig.passWord = passWord; } /** * @return Returns the emailForm. */ public static String getEmailForm() { return emailForm; } /** * @param emailForm * The emailForm to set. */ @Value("${mail.emailForm}") public void setEmailForm(String emailForm) { MailConfig.emailForm = emailForm; } /** * @return Returns the timeout. */ public static String getTimeout() { return timeout; } /** * @param timeout * The timeout to set. */ @Value("${mail.timeout}") public void setTimeout(String timeout) { MailConfig.timeout = timeout; } /** * @return Returns the personal. */ public static String getPersonal() { return personal; } /** * @param personal * The personal to set. */ @Value("${mail.personal}") public void setPersonal(String personal) { MailConfig.personal = personal; } /** * @return Returns the html. */ public static String getHtml() { return html; } /** * @param html * The html to set. */ @Value("${mail.html}") public void setHtml(String html) { MailConfig.html = html; } /** * @return Returns the subject. */ public static String getSubject() { return subject; } /** * @param subject * The subject to set. */ @Value("${mail.subject}") public void setSubject(String subject) { MailConfig.subject = subject; } }
springboot靜態(tài)屬性注入的解決
第一種方式
通過springboot組件初始化生命周期進(jìn)行屬性(對象)賦值
@Component public class DSHWechatApiUtil extends DSHBaseController { @Autowired private IThirdPartyAuthDao thirdPartyAuthDao; private static IThirdPartyAuthDao staticThirdPartyAuthDao; @PostConstruct public void init() { staticThirdPartyAuthDao = thirdPartyAuthDao; } public static JSONObject getAuthorizerToken(String componentAccessToken, String authorizerAppid, String authorizerRefreshToken) { JSONObject returnObject = new JSONObject(); try { if (DSHUtils.isEmpty(componentAccessToken)) { componentAccessToken = staticThirdPartyAuthDao.selectWechatValue(DSHConstants.WECHAT_PARAMS.COMPONENT_ACCESS_TOKEN); } } catch (Exception e) { e.printStackTrace(); } return returnObject; } }
可以看到,當(dāng)DSHWechatApiUtil工具類組件進(jìn)行初始化時,調(diào)用@PostConstruct注解標(biāo)注的方法,對靜態(tài)變量進(jìn)行了賦值。
第二種方式
通過@Value()注解
@Value()注解不會對靜態(tài)變量進(jìn)行屬性注入,通過第一種方式的思維,那么我們肯定得想個辦法,在這個組件初始化時也來賦值。
第一種方式肯定也是可以的,先寫一個屬性,然后通過@Value()注解對這個屬性進(jìn)行賦值,最后通過@PostConstruct注解方式賦值給靜態(tài)屬性。
這里我們要采用另一個方式,這里的方式是通過set方法來賦值。屬性是static修飾的,get方法也是static修飾的,但是set方法不能是static修飾,使用@Value()注解來修飾set方法。
這樣就能成功注入。
第三種方式
第三種方式和第二種差不多,
@ConfigurationProperties(prefix = ProjectConfig.PROJECT_PREFIX) public class ProjectConfig { public static final String PROJECT_PREFIX = "project"; /** * 系統(tǒng)版本號 */ private String version; /** * 項目名稱 */ private String name; /** * 版權(quán)年份 */ private String copyrightYear; /** * 實例演示開關(guān) */ private static boolean demoEnabled; /** * 獲取地址ip開關(guān) */ private static boolean addressEnabled; public String getVersion() { return version; } public void setVersion(String version) { this.version = version; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getCopyrightYear() { return copyrightYear; } public void setCopyrightYear(String copyrightYear) { this.copyrightYear = copyrightYear; } public boolean isDemoEnabled() { return demoEnabled; } public void setDemoEnabled(boolean demoEnabled) { ProjectConfig.demoEnabled = demoEnabled; } public static boolean isAddressEnabled() { return addressEnabled; } public void setAddressEnabled(boolean addressEnabled) { ProjectConfig.addressEnabled = addressEnabled; } }
如上述代碼,只要把set方法設(shè)置為非靜態(tài),那么這個配置類的靜態(tài)屬性就能成功注入了。
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java數(shù)據(jù)結(jié)構(gòu)及算法實例:快速計算二進(jìn)制數(shù)中1的個數(shù)(Fast Bit Counting)
這篇文章主要介紹了Java數(shù)據(jù)結(jié)構(gòu)及算法實例:快速計算二進(jìn)制數(shù)中1的個數(shù)(Fast Bit Counting),本文直接給出實現(xiàn)代碼,代碼中包含詳細(xì)注釋,需要的朋友可以參考下2015-06-06JVM優(yōu)先級線程池做任務(wù)隊列的實現(xiàn)方法
這篇文章主要介紹了JVM優(yōu)先級線程池做任務(wù)隊列的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08如何在java文件中設(shè)置文字顏色:setTextColor()
這篇文章主要介紹了如何在java文件中設(shè)置文字顏色:setTextColor(),文末補(bǔ)充介紹了在java代碼中設(shè)置字體顏色方法總結(jié),結(jié)合實例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-09-09