架构师_程序员_码农网

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 16988|回复: 0

[资料] spring boot 读取(application.yml)配置文件的值

[复制链接]
发表于 2019-1-7 15:37:14 | 显示全部楼层 |阅读模式
首先application.yml配置文件配置如下:

QQ截图20190107152319.jpg

maven项目pom.xml添加包:




新建映射的对象,代码如下:

String类型的一定需要setter来接收属性值;maps, collections, 和 arrays 不需要

使用@Autowired注解来自动注入,如下图:

QQ截图20190107152626.jpg

esConfig 总是输出null,搜索了半天解决方案,未果,下面会有解决办法。

我们新建一个Controller控制器,代码如下:

可以注入成功,并且正常获取到yml配置文件的值,如下:

QQ截图20190107152848.jpg

EsClient无法注入成功的原因如下:

在构造函数中调用一个本class的函数,而这个函数中用到了本class的@Autowired的变量。

于是觉得可能会出错。因为@Autowired一定要等本类构造完成后,才能从外部引用设置进来。所以@Autowired的注入时间一定会晚于构造函数的执行时间。
解决方案:

Spring Team recommends “Always use constructor based dependency injection in your beans. Always use assertions for mandatory dependencies”.

翻译:

Spring建议”总是在您的bean中使用构造函数建立依赖注入。总是使用断言强制依赖”。


原来的写法:

修改后的写法:

QQ截图20190107153641.jpg

PS:Java变量的初始化顺序为:静态变量或静态语句块–>实例变量或初始化语句块–>构造方法–>@Autowired

那么最开始Spring建议,为何要将成员变量加上final类型呢?

网上有解释如下:spring配置默认的bean的scope是singleton,也就是启动后一直有。通过设置bean的scope属性为prototype来声明该对象为动态创建。但是,如果你的service本身是singleton,注入只执行一次。

@Autowired本身就是单例模式,只会在程序启动时执行一次,即使不定义final也不会初始化第二次,所以这个final是没有意义的吧。

可能是为了防止,在程序运行的时候,又执行了一遍构造函数;

或者可能是更容易让人理解的意思吧,加上final只会在程序启动的时候初始化一次。






上一篇:Spring Boot+maven快速构建项目
下一篇:2018中国互联网大事记发布
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

免责声明:
码农网所发布的一切软件、编程资料或者文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。

Mail To:help@itsvse.com

QQ|手机版|小黑屋|架构师 ( 鲁ICP备14021824号-2 )|网站地图

GMT+8, 2024-4-25 20:38

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表