Springboot如何读取自定义pro文件注入static静态变量
Springboot如何读取自定义pro文件注入static静态变量
本文小编为大家详细介绍“Springboot如何读取自定义pro文件注入static静态变量”,内容详细,步骤清晰,细节处理妥当,希望这篇“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.javaCreatedon2019年9月11日*Copyright(c)2019ZDSoftNetworks,Inc.Allrightsreserved.*$Id$*/packagecom.hxyc.config.properties;importorg.springframework.beans.factory.annotation.Value;importorg.springframework.context.annotation.Configuration;importorg.springframework.context.annotation.PropertySource;importorg.springframework.stereotype.Component;/***@authorhuangzy*@version$Revision:1.0$,$Date:2019年9月11日上午10:29:35$*/@Configuration@PropertySource(value="classpath:config/mailConfig.properties",encoding="UTF-8")@ComponentpublicclassMailConfig{publicstaticStringhost;publicstaticIntegerport;publicstaticStringuserName;publicstaticStringpassWord;publicstaticStringemailForm;publicstaticStringtimeout;publicstaticStringpersonal;publicstaticStringhtml;publicstaticStringsubject;/***@returnReturnsthehost.*/publicstaticStringgetHost(){returnhost;}/***@paramhost*Thehosttoset.*/@Value("${mail.host}")publicvoidsetHost(Stringhost){MailConfig.host=host;}/***@returnReturnstheport.*/publicstaticIntegergetPort(){returnport;}/***@paramport*Theporttoset.*/@Value("${mail.port}")publicvoidsetPort(Integerport){MailConfig.port=port;}/***@returnReturnstheuserName.*/publicstaticStringgetUserName(){returnuserName;}/***@paramuserName*TheuserNametoset.*/@Value("${mail.userName}")publicvoidsetUserName(StringuserName){MailConfig.userName=userName;}/***@returnReturnsthepassWord.*/publicstaticStringgetPassWord(){returnpassWord;}/***@parampassWord*ThepassWordtoset.*/@Value("${mail.passWord}")publicvoidsetPassWord(StringpassWord){MailConfig.passWord=passWord;}/***@returnReturnstheemailForm.*/publicstaticStringgetEmailForm(){returnemailForm;}/***@paramemailForm*TheemailFormtoset.*/@Value("${mail.emailForm}")publicvoidsetEmailForm(StringemailForm){MailConfig.emailForm=emailForm;}/***@returnReturnsthetimeout.*/publicstaticStringgetTimeout(){returntimeout;}/***@paramtimeout*Thetimeouttoset.*/@Value("${mail.timeout}")publicvoidsetTimeout(Stringtimeout){MailConfig.timeout=timeout;}/***@returnReturnsthepersonal.*/publicstaticStringgetPersonal(){returnpersonal;}/***@parampersonal*Thepersonaltoset.*/@Value("${mail.personal}")publicvoidsetPersonal(Stringpersonal){MailConfig.personal=personal;}/***@returnReturnsthehtml.*/publicstaticStringgetHtml(){returnhtml;}/***@paramhtml*Thehtmltoset.*/@Value("${mail.html}")publicvoidsetHtml(Stringhtml){MailConfig.html=html;}/***@returnReturnsthesubject.*/publicstaticStringgetSubject(){returnsubject;}/***@paramsubject*Thesubjecttoset.*/@Value("${mail.subject}")publicvoidsetSubject(Stringsubject){MailConfig.subject=subject;}}
springboot静态属性注入的解决
第一种方式
通过springboot组件初始化生命周期进行属性(对象)赋值
@ComponentpublicclassDSHWechatApiUtilextendsDSHBaseController{@AutowiredprivateIThirdPartyAuthDaothirdPartyAuthDao;privatestaticIThirdPartyAuthDaostaticThirdPartyAuthDao;@PostConstructpublicvoidinit(){staticThirdPartyAuthDao=thirdPartyAuthDao;}publicstaticJSONObjectgetAuthorizerToken(StringcomponentAccessToken,StringauthorizerAppid,StringauthorizerRefreshToken){JSONObjectreturnObject=newJSONObject();try{if(DSHUtils.isEmpty(componentAccessToken)){componentAccessToken=staticThirdPartyAuthDao.selectWechatValue(DSHConstants.WECHAT_PARAMS.COMPONENT_ACCESS_TOKEN);}}catch(Exceptione){e.printStackTrace();}returnreturnObject;}}
可以看到,当DSHWechatApiUtil工具类组件进行初始化时,调用@PostConstruct注解标注的方法,对静态变量进行了赋值。
第二种方式
通过@Value()注解
@Value()注解不会对静态变量进行属性注入,通过第一种方式的思维,那么我们肯定得想个办法,在这个组件初始化时也来赋值。
第一种方式肯定也是可以的,先写一个属性,然后通过@Value()注解对这个属性进行赋值,最后通过@PostConstruct注解方式赋值给静态属性。
这里我们要采用另一个方式,这里的方式是通过set方法来赋值。属性是static修饰的,get方法也是static修饰的,但是set方法不能是static修饰,使用@Value()注解来修饰set方法。
这样就能成功注入。
第三种方式
第三种方式和第二种差不多,
@ConfigurationProperties(prefix=ProjectConfig.PROJECT_PREFIX)publicclassProjectConfig{publicstaticfinalStringPROJECT_PREFIX="project";/***系统版本号*/privateStringversion;/***项目名称*/privateStringname;/***版权年份*/privateStringcopyrightYear;/***实例演示开关*/privatestaticbooleandemoEnabled;/***获取地址ip开关*/privatestaticbooleanaddressEnabled;publicStringgetVersion(){returnversion;}publicvoidsetVersion(Stringversion){this.version=version;}publicStringgetName(){returnname;}publicvoidsetName(Stringname){this.name=name;}publicStringgetCopyrightYear(){returncopyrightYear;}publicvoidsetCopyrightYear(StringcopyrightYear){this.copyrightYear=copyrightYear;}publicbooleanisDemoEnabled(){returndemoEnabled;}publicvoidsetDemoEnabled(booleandemoEnabled){ProjectConfig.demoEnabled=demoEnabled;}publicstaticbooleanisAddressEnabled(){returnaddressEnabled;}publicvoidsetAddressEnabled(booleanaddressEnabled){ProjectConfig.addressEnabled=addressEnabled;}}
如上述代码,只要把set方法设置为非静态,那么这个配置类的静态属性就能成功注入了。
读到这里,这篇“Springboot如何读取自定义pro文件注入static静态变量”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注恰卡编程网行业资讯频道。
推荐阅读
-
深入理解php static变量、方法 static后期静态绑定
静态方法不需要所在类被实例化就可以直接使用。静态方法效率上要比实例化高,静态方法的缺点是不自动进行销毁,而实例化的则可...
-
学会这些,就算不精通PHP,一样搞定面试和笔试
-
后期静态绑定在PHP中的使用
什么叫后期静态绑定呢?其实我们在之前的文章PHP中的static中已经说过这个东西了。今天我们还是再次深入的理解一下这个概念。...
-
php中关于self和static代表本类的区别详解
在php中self关键字能够代表当前类,一般用于调用当前类的静态方法或者静态属性。但是static除了能够定义静态这一属性...
-
springboot实现基于aop的切面日志
本文实例为大家分享了springboot实现基于aop的切面日志的具体代码,供大家参考,具体内容如下通过aop的切面方式实现日志...
-
警告!!!亚马逊封号的16个操作,你都知道有哪些?最后一个很多人会犯
-
SpringBoot定时任务功能怎么实现
-
SpringBoot中的@Import注解怎么使用
-
SpringBoot整合Lombok及常见问题怎么解决
-
springboot图片验证码功能模块怎么实现