Springboot|Springboot 读取自定义pro文件注入static静态变量方式

Springboot 读取pro文件注入static静态变量
mailConfig.properties

#服务器mail.host=smtp.qq.com#端口号mail.port=587#邮箱账号mail.userName=hzy_daybreak_lc@foxmail.com#邮箱授权码mail.passWord=vxbkycyjkceocbdc#时间延迟mail.timeout=25000#发送人mail.emailForm=hzy_daybreak_lc@foxmail.com#发件人mail.personal=华夏衣裳#主题mail.subject=同袍用户激活#内容模板mail.html=您的邮箱验证码为:

MailConfig.java
/* * @(#)MailConfig.javaCreated 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 = "https://www.it610.com/article/classpath:config/mailConfig.properties", encoding = "UTF-8")@Componentpublic 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静态属性注入的解决
第一种方式 通过springboot组件初始化生命周期进行属性(对象)赋值
@Componentpublic class DSHWechatApiUtil extends DSHBaseController {@Autowiredprivate IThirdPartyAuthDao thirdPartyAuthDao; private static IThirdPartyAuthDao staticThirdPartyAuthDao; @PostConstructpublic 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; }}

可以看到,当DSHWechatApiUtil工具类组件进行初始化时,调用@PostConstruct注解标注的方法,对静态变量进行了赋值。
第二种方式 通过@Value()注解
@Value()注解不会对静态变量进行属性注入,通过第一种方式的思维,那么我们肯定得想个办法,在这个组件初始化时也来赋值。
第一种方式肯定也是可以的,先写一个属性,然后通过@Value()注解对这个属性进行赋值,最后通过@PostConstruct注解方式赋值给静态属性。
这里我们要采用另一个方式,这里的方式是通过set方法来赋值。属性是static修饰的,get方法也是static修饰的,但是set方法不能是static修饰,使用@Value()注解来修饰set方法。
Springboot|Springboot 读取自定义pro文件注入static静态变量方式
文章图片

这样就能成功注入。
第三种方式 第三种方式和第二种差不多,
@ConfigurationProperties(prefix = ProjectConfig.PROJECT_PREFIX)public class ProjectConfig {public static final String PROJECT_PREFIX = "project"; /*** 系统版本号*/private String version; /*** 项目名称*/private String name; /*** 版权年份*/private String copyrightYear; /*** 实例演示开关*/private static boolean demoEnabled; /*** 获取地址ip开关*/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方法设置为非静态,那么这个配置类的静态属性就能成功注入了。
【Springboot|Springboot 读取自定义pro文件注入static静态变量方式】以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

    推荐阅读