@Value如何设置默认值

 更新时间:2023年07月28日 09:30:50   作者:有梦想的攻城狮  
这篇文章主要介绍了@Value如何设置默认值问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

@Value设置默认值

使用@Value注解将变量进行自动注入的时候,经常会出现的一个问题就是我们可能会由于在配置参数中忘记设置该参数造成整个项目报错,其实我们可以通过给被@Value注解作用的变量进行注入的时候如果没有找到该配置参数时设置一个默认值,相当于是一个兜底的方案:

没有默认值的用法:

@Value("${spring.port}")
private String port;

增加默认值的用法:

@Value("${spring.port:8080}")
private String port;

这里需要注意的是:

  • 即使你的配置参数的值是String类型的话也不需要加双引号
  • 被static修饰的变量通过@Value会注入失败

如果是因为特定需求必须要给static变量进行@Value设值的话,可以采用下面这种方式

  • 给static变量采用@Value设值
public static String port;
@Value("${spring.port:8080}")
public void setPort(String port){
    Class.port = port;
}

@Value() 设置默认值后,配置值无法生效的解决

遇到的现象:

使用@Value(${cash.trade.show.loan.repay:true})配置后,即使配置文件里配置了cash.trade.show.loan.repay = false ,程序获得的showLoanRepay还是true。

这边源码会去匹配":"获得后面的值,然后给propVal赋值,由于后面的判断都是依照if(propVal==null)进行判断的,所以默认值赋值上去之后就不会获取配置文件的值了。

这个是PropertyPlaceholderConfigurer的问题,如果是

由于方法列表里放有两个方法,PropertyPlaceholderConfigurer先操作,所以默认值赋值后导致后面的PropertySourcesPlaceholderConfigurer无法获取到配置项里的内容,如果列表顺序换一下,就可以了,但是没找到怎么弄。

这边就是按顺序方法执行进行匹配参数

解决方法和解决理由

所以打算换个思路,不设置默认值,并且让系统在没有获取到默认值时也不报错。

进入源码发现,如果没有配置时会根据下面这个参数进行判断是否抛出异常

而前一张图里发现PropertyPlaceholderConfigurer的值为true,PropertySourcesPlaceholderConfigurer的值为false,所以我们需要把PropertySourcesPlaceholderConfigurer的值配置成true这样两个工具都不会进行抛错了。

只需要在spring的xml配置中加以下代码对 进行设置

    <bean id="propertySourcesPlaceholderConfigurer" class="org.springframework.context.support.PropertySourcesPlaceholderConfigurer">
        <property name="ignoreUnresolvablePlaceholders" value="true"/>
    </bean>

但是这里要注意了,如果你默认的参数设置成String以外的就会报错哦,我这边就是设置成Boolean。

这里发现,如果你没有进行配置,并且设置忽略没配置时,value值会被设为${}里面的参数名称,所以会抛出类型异常,所以我把参数设置成了String,并且当值等于参数名时当成时默认值。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Java设计模式---迭代器模式(Iterator)解读

    Java设计模式---迭代器模式(Iterator)解读

    这篇文章主要介绍了Java设计模式---迭代器模式(Iterator),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-06-06
  • JDK 7 新特性小结实例代码解析

    JDK 7 新特性小结实例代码解析

    这篇文章通过实例代码给大家介绍了JDK 7 新特性小结篇,感兴趣的朋友一起看看吧
    2018-03-03
  • 基于Spring概念模型:PathMatcher 路径匹配器

    基于Spring概念模型:PathMatcher 路径匹配器

    这篇文章主要介绍了Spring概念模型:PathMatcher 路径匹配器,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-09-09
  • java时间戳与日期相互转换工具详解

    java时间戳与日期相互转换工具详解

    这篇文章主要为大家详细介绍了java各种时间戳与日期之间相互转换的工具,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-12-12
  • Java基于Socket实现HTTP下载客户端

    Java基于Socket实现HTTP下载客户端

    这篇文章主要介绍了Java基于Socket实现HTTP下载客户端的相关资料,感兴趣的小伙伴们可以参考一下
    2016-01-01
  • SpringSecurity+jwt+captcha登录认证授权流程总结

    SpringSecurity+jwt+captcha登录认证授权流程总结

    本文介绍了SpringSecurity、JWT和验证码在Spring Boot 3.2.0中的应用,包括登录认证和授权流程的详细步骤,本文给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧
    2024-11-11
  • java实现哈夫曼文件解压缩

    java实现哈夫曼文件解压缩

    这篇文章主要为大家详细介绍了java实现哈夫曼文件解压缩,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-06-06
  • SpringBoot详细列举常用注解的说明

    SpringBoot详细列举常用注解的说明

    在开发SpringBoot程序的过程中,有可能与其他业务系统进行对接开发,获取封装公共的API接口等等,下面这篇文章主要给大家介绍了关于SpringBoot常见的注解的相关资料,需要的朋友可以参考下
    2022-06-06
  • 使用Java实现为PPT(PowerPoint)设置背景

    使用Java实现为PPT(PowerPoint)设置背景

    在日益数字化的办公环境中,PowerPoint 演示文稿已成为信息传达不可或缺的工具,本文将深入探讨如何利用 Spire.Presentation for Java 为PowerPoint幻灯片设置纯色、渐变色和图片背景,感兴趣的可以了解下
    2025-08-08
  • Java后端产生验证码后台验证功能的实现代码

    Java后端产生验证码后台验证功能的实现代码

    这篇文章主要介绍了Java后台产生验证码后台验证功能,本文文字结合实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-06-06

最新评论