spring中使用@Value设置全局变量默认值

  前几天在开发过程中遇到一个使用 spring 的 @Value 给类的全局变量设置默认值不成功的问题,最后通过查资料也是轻松解决,但是发现使用@Value也是有多种多样的方式,今天总算是将开发任务结束,于是打算回过头来再去研究研究这个问题。

一、首先展示两种我这边的错误写法。让大家引以为戒。

  1. 在给类的全局静态变量设置默认值时,@Value 不能直接写在变量上方。

  

  2.将 @Value 加到set方法上时,不能使用 static 修饰

  3.使用 @Value 时不能用#代替$

  以上几种错误就是我在开发过程中出现的一些比较容易出现的错误,下面就是我在查询资料时学习到@Value的一些使用方法。

二、配置 .properties 文件

  使用 @Value 我们一般会将一些经常容易修改,但是在程序中不变的变量配置到配置文件中,一般是 .properties 文件,下面是三种不同的方式去将  .properties 文件引入到项目中。

  1. 在spring 的配置文件中使用 <context:property-placeholder/> 标签,其中 loaction 为配置文件路径 file-encoding 为配置编码格式

   2. 在spring 的配置文件中配置bean

  3. 第三种则是使用 @PropertySource 注解将配置文件加载到某一个类中

 三、@Value 注解的使用

  1. 非静态变量使用 @Value

    ①. 将@Value 加在变量上 

    ②. 将@Value 加在 set 方法上

 

  2. 静态变量使用 @Value

     静态变量在使用 @Value时,只能加在 set 方法上面,并且set方法不能是静态方法

 

 四、# 符与 $ 符的区别

   1. @Value("#{}")

     ①. 直接给变量赋值

    ②. 对赋值的字符串进行一些操作

    ③. 如果 .properties 是以bean的方式注入的,则可以使用bean的id去获取属性

    ④. 上面的情况还可以这么写

    ⑤. 表达式

   2. @Value("${}")

     ①. 获取普通配置文件中的属性

    ②. 如果配置文件中没有获取到属性值则使用默认值

 

  3. 其他无符号用途

    ①. 文件资源

 

    ②. 网站资源

 五、在引入 .properties 文件时出现的 编码问题

  在上面学习开始时我还遇到使用 @Value 注解设置默认值为中文时出现的乱码问题,我在网上百度出来好多博客几乎大同小异都是下面两种解决方案,以及修改 IDE 的编码格式等等:

  1.修改注解

   2. 修改配置文件

   但是,在我实践的过程中发现,这两种方式都不能生效不知道是因为我在什么地方没有添加什么配置还是什么原因,如果有知道的小伙伴可以给我留言。我在测试时发现 .properties 文件在读取时,无论 IDE 将文件设置为什么格式,都会将内容转换为 ISO-8859-1 的编码。于是我在获取到默认值之后再将之转换为 UTF-8.

 

  还有一种方式就是在.properties  文件中写中文时直接转换成Unicode 编码,使用 @Value 时就不用做其他转码操作。

  

-------------------- END ---------------------

 

最后附上作者的微信公众号地址和博客地址 

公众号:wuyouxin_gzh

 

Herrt灬凌夜:https://www.cnblogs.com/wuyx/

版权说明:欢迎以任何方式进行转载,但请在转载后注明出处!

原文地址:https://www.cnblogs.com/wuyx/p/9554874.html