关于@Value取值为NULL的解决方案

目录
  • @Value取值为NULL的问题
  • @Value取值为NULL原因分析
    • 一.@Value(“${}”)的使用
    • 二. @Value{“#{}”}的使用

@Value取值为NULL的问题

在spring mvc架构中,如果希望在程序中直接使用properties中定义的配置值,通常使用一下方式来获取:

    @Value("${tag}")
    private String tagValue;

但是取值时,有时这个tagvalue为NULL,可能原因有:

使用static或final修饰了tagValue,如下:

    private static String tagValue;  //错误
    private final String tagValue;    //错误

类没有加上@Component(或者@service等)

    @Component   //遗漏
    class TestValue{
         @Value("${tag}")
         private String tagValue;
    }

类被new新建了实例,而没有使用@Autowired

   @Component   
    class TestValue{
         @Value("${tag}")
         private String tagValue;
    }
    class Test{
        ...
        TestValue testValue = new TestValue()
    }

这个testValue中肯定是取不到值的,必须使用@Autowired:

class Test{
        @AutoWired
        TestValue testValue
    }

@Value取值为NULL原因分析

有两种方式:

  • @Value(“${}”)用于获取配置文件中的属性值,通常用于获取写在application.properties中的内容;
  • @Value(“#{}”) 其实是SpEL表达式的值,可以表示常量的值,或者获取bean中的属性

区别:

  • ① ${ property : default_value } //property对应外部配置文件,default_value,就是前面的值为空时的默认值。
  • ② #{ obj.property? :default_value } //SpEL表达式,obj代表对象

一.@Value(“${}”)的使用

 @Value("${inputDir}")
 private String inputDir;

但有时候@Value(“${}”)取值为NULL,可能是由下面几个原因造成的:

1.类没有交给spring管理,即没有加上@Component等注解

@Service
public class TestValue{
    @Value("${inputDir}")
    private String inputDir;
    ……
    }

2.使用 static或final修饰成员变量

@Value("${inputDir}")
private static String inputDir;//错误,不能使用@Value给static成员变量赋值
@Value("${inputDir}")
private final String inputDir;//错误,不能使用@Value给final成员变量赋值

3.自己new了一个对象实例,而没有使用@Autowired注解

class Test{
    @AutoWired
    TestValue testValue
    //TestValue testValue = new TestValue()//错误,自己new的对象不能通过@Value注解获取配置值。
}

二. @Value{“#{}”}的使用

@RestController
@RequestMapping("/login")
@Component
public class LoginController {

	@Value("#{1}")
	private int number; //获取数字 1

	@Value("#{'Spring Expression Language'}") //获取字符串常量
	private String str;

	@Value("#{dataSource.url}") //获取bean的属性,dataSource为spring管理的obj,不是配置文件中的配置项
	private String jdbcUrl;

	@Autowired
	private DataSourceTransactionManager transactionManager;

	@RequestMapping("login")
	public String login(String name,String password) throws FileNotFoundException{
		System.out.println(number);
		System.out.println(str);
		System.out.println(jdbcUrl);
		return "login";
	}
}

运行结果

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

(0)

相关推荐

  • 关于@Value注解取不到值的几种情况

    目录 @Value注解取不到值的几种情况 几种获取不到值的特殊情况如下 @Value取不到值的原因 可能原因有 正确方式 @Value注解取不到值的几种情况 在spring的框架中,我们经常使用@Value注解来获取定义在application.properties的属性值,正常情况下是可以轻松的获取到值的,但是有几种特殊情况下是获取不到值的,在这记录下,以防止以后犯错误.正常获取的用法如下: 在application.properties中定义一个属性值: 正常情况下在代码里面这样获取: @V

  • Spring@Value使用获取配置信息为null的操作

    一.项目背景 1.介绍: 最近在springboot项目中需要做一个阿里云OSS图片上传功能点,将OSS图片上传代码提取到公共工具类中,为了方便其他模块调用. 2.问题介绍 在公共工具类中使用OSS一些自定义变量信息时会获取不到yml文件中定义的OSS参数. 3.问题分析 经过分析确定,公共工具类方法没有被spring 容器作为bean管理,所以获取不到配置文件信息.以前我们经常在controller层以及service层通过@Value获取配置文件信息,该层都被spring容器作为bean管理

  • Springboot @Value获取值为空问题解决方案

    这篇文章主要介绍了Springboot @Value获取值为空问题解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 在spring中,常常使用 @Value("${property}") 从application.properties中取值,需要注意两点 使用 @Value 的类不能使用 new 关键字进行实例化对象,必须采用 依赖注入的方式进行实例化 不能使用显式的构造方法 否则,将取不到值.解决方法如下: 删除显式的构造方法

  • 关于@Value取值为NULL的解决方案

    目录 @Value取值为NULL的问题 @Value取值为NULL原因分析 一.@Value(“${}”)的使用 二. @Value{“#{}”}的使用 @Value取值为NULL的问题 在spring mvc架构中,如果希望在程序中直接使用properties中定义的配置值,通常使用一下方式来获取:     @Value("${tag}")     private String tagValue; 但是取值时,有时这个tagvalue为NULL,可能原因有: 使用static或fin

  • request.getParameter()取值为null的解决方法

    原因是:我只设置了id属性 而在JSP页面使用javascript的时候用ID属性,但是在后台通过Request取值的时候用的是name属性.问题就处在这里.

  • Springboot在有参构造方法类中使用@Value注解取值

    我们在Springboot中经常使用@Value注解来获取配置文件中的值,像下面这样 @Component class A { @Value("${user.value}") private String configValue; public void test() { System.out.println(configValue); } } 但有时我们需要这个类拥有一个有参的构造方法,比如 @Component class A { @Value("${user.value

  • JavaScript中${pageContext.request.contextPath}取值问题及解决方案

    在JSP里取${pageContext.request.contextPath},方式一是可以正常取到,但方式二却取到的是 字符"${pageContext.request.contextPath}" 方式一: <script type="text/JavaScript"> var t = "${pageContext.request.contextPath}"; <script> 方式二: <script src=

  • 解决request.getParameter取值后的if判断为NULL的问题

    目录 request.getParameter取值后if判断为NULL 开始时,用语句判断 查明原因 servlet中request.getParameter得到null的几个可能 可能性一 可能性二 可能性三 可能性四 request.getParameter取值后if判断为NULL 以下为我程序的一部分,Auto_space_time_ok.jsp文件从Auto_space_time.jsp获取的值代码,此处博主需要做一个判断,当danwei 等于“学校”字符串时,将 zhuangtai的值

  • Java如何取掉json数据中值为null的属性字段

    目录 取掉json数据中值为null的属性字段 用注解的方式放在标记类或者属性 或者在配置文件中添加全局配置 json返回隐藏null值的字段 取掉json数据中值为null的属性字段 @JsonInclude(JsonInclude.Include.NON_NULL)  集成于Springboot2.0中此方法的配置意在实体类与json互转的时候 属性值为null的不参与序列化. 使用时: 用注解的方式放在标记类或者属性 或者在配置文件中添加全局配置 jackson.default-prope

  • 详解layui中的树形关于取值传值问题

    本文介绍了layui中的树形关于取值传值问题,分享给大家,具体如下: 这个是我们需要的效果,实际操作中会先执行渲染 然后在执行方法,然后我们发现树形的JSON是空,调试了N遍一直以为是优先级别的问题了. 最后解决方案是 <script type="text/javascript"> ////layui 的 form 模块 var form = ""; layui.use(['form'], function () { // $ = layui.jquer

  • SpringSecurity页面授权与登录验证实现(内存取值与数据库取值)

    目录 SpringSecurity? 一.导入依赖 二.配置yml文件 三.代码部分 DAO层(注意@Repository与@Mapper注解) Service层(注意@Service注解) Controller层(注意@Controller注解) POJO Utils 资源目录结构 运行效果 SpringSecurity? Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架.它提供了一组可以在Spring应用上下文中配置的Bean

  • MyBatis中foreach标签的collection属性的取值方式

    目录 foreach标签的collection属性的取值 传的是List列表 传的是Array数组 传的是Map collection属性总结 MyBatis使用foreach标签报错 原因 解决方案 foreach标签的collection属性的取值 传的是List列表 接口代码 List<Emp> findEmpByDeptnos(List<Integer> deptnos); xml配置代码 <select id="findEmpByDeptnos"

  • 一文介绍mysql中TINYINT取值范围

    目录 项目场景: 问题描述: 原因分析: 解决方案: 项目场景: 最近在开发过程中,看见表设计中是thinyint字段,但对于它的范围产生了好奇 问题描述: 当我们填写超过128数值的时候,该字段就会报以下错误 Cause:com.mysql.jdbc.MysqlDataTruncation:Data truncation:Out of range value for column 'priority' at row 1; 原因分析: 从 -2^7 (-128) 到 2^7 - 1 (127)

随机推荐