问题
自己开发一个工具类,为第三方应用提供调用接口,但是打包后测试过程中,发现了一个问题就是在用@Value获取配置文件内容的时候,无法获取我们的配置信息,也无法加载我们配置的默认值!具体配置如下:
@Value("${login.url:/yuxuntoo/login}")
private String loginUrl;
从上方的配置文件我们也能看出所写的注解和方式是完全没有问题的!
查看源码后的具体流程
实际上就是对类上的value后面的属性值进行解析,然后拿到解析的数据和配置文件中的数据进行对比。如果对比成功,那么则通过反射,把相关的属性进行赋值。而配置文件的数据我们在上面加载environment文件的时候,已经把内容存储了起来。
主要代码在:org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#populateBean
解决思路
从配置上,完全没有写错的可能,见上方的配置,所以只能从不能获取配置文件内容的几种可能着手了!
- 变量被static关键字所修饰
- 我们所需要获取配置文件的变量在Bean初始化的过程中被引用
具体解决方案
如果是原有static修饰的变量,调整一下变量修饰符,或者去掉static的修饰,改为普通变量。
如果是在Bean的初始化过程中被引用的话,这个就有点不太好搞了。首先查看一下业务是否必须在这个初始化的时候加进来,如果不是必须的话,可以调整为在外部调用赋值。毕竟构造函数只是初始化这个类本身,一些参数的赋值还是可以从外部调用其他方法来完成的!
总结
所有的问题找不到的时候,可以通过源码查看流程,然后可以很清晰的明确出这个问题的定位。
好了!今天的内容就到这里,感谢大家的查看!
欢迎大家关注我的公 众 号 《coder练习生》
版权归原作者 ybb_ymm 所有, 如有侵权,请联系我们删除。