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静态变量”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注恰卡编程网行业资讯频道。

发布于 2022-04-11 21:14:24
收藏
分享
海报
0 条评论
26
上一篇:SpringBoot怎么快速入门 下一篇:怎么用springboot+mybatis plus实现树形结构查询
目录

    0 条评论

    本站已关闭游客评论,请登录或者注册后再评论吧~

    忘记密码?

    图形验证码