关于@Value取值为NULL的解决方案
作者:zzmlake 发布时间:2021-07-15 06:38:42
标签:@Value,取值,NULL
@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";
}
}
运行结果
来源:https://blog.csdn.net/zzmlake/article/details/54946346


猜你喜欢
- 本文实例讲述了用WebBrowser操作frame和iframe的方法,比较适合C#初学者参考学习。示例浅显易懂,具体方法如下:
- 前言在一些开源的框架的源码当中时不时都可以看到volatile这个关键字,最近特意学习一下volatile关键字的使用方法。volatile
- 函数与指针一个函数在编译时被分配一个入口地址,这个入口地址就称为函数的指针。在C++中, 函数名代表函数的入口地址。指针作函数的参数-实现地
- 需求读200+的CSV/EXCEL文件,按文件名称存到不同数据库前期准备环境maven + jdk8 + mysql代码展示pom文件<
- Android动态修改ToolBar的Menu菜单效果图实现实现很简单,就是一个具有3个Action的Menu,在我们滑动到不同状态的时候,
- 标识符Java 对各种变量、方法和类等要素命名时使用的字符序列称为标识符技巧:凡是自己可以起名字的地方都叫标识符定义合法标识符规则:由26个
- 🍅1.注解JUnit提供了非常强大的注解功能,通过@Test注解修饰到方法上,该方法就变为了一个测试方法,执行当前类时,会自动的执行该类下所
- 前言在计算机操作系统中,进程是进行资源分配和调度的基本单位。这对于基于Linux内核的Android系统也不例外。在Android的设计中,
- 本文实例讲述了C#实现在前端网页弹出警告对话框(alert)的方法。分享给大家供大家参考。具体如下:通常我们通过JS生成警告对话框,下面的代
- 上一篇介绍了使用springmvc集成shiro登陆过程,通过FormAuthenticationFilter过滤器获取到用户输入的账号密码
- 看完本文你将了解:ACTION_CANCEL的触发时机滑出子View区域会发生什么?为什么不响应onClick()事件首先看一下官方的解释:
- 最近研究了一下Contacts源码,仿照上面自己写了一个TabHostTest程序,现整理如下:main.xml布局文件:<?xml
- 1、引出安卓初学者一般在写android Activity的时候总是会在onCreate方法中加上setContentView方法来加载la
- 前言上一篇:微服务网关Zuul上文中,我们介绍了微服务网关Zuul,Zuul 是 Netflix 公司开源的产品,被称为第一代网关,也是 S
- 前言随着使用 Spring 进行开发的个人和企业越来越多,Spring 也慢慢从一个单一简洁的小框架变成一个大而全的开源软件,Spring
- 运算符运算符,顾名思义就是用来执行数学运算的。在Java中运算符可以分为:算术运算符、关系运算符、逻辑运算符、位运算符、移位运算符、条件运算
- 目前系统集成短信似乎是必不可少的部分,由于各种云平台都提供了不同的短信通道,这里我们增加多租户多通道的短信验证码,并增加配置项,使系统可以支
- Android 将view 转换为Bitmap出现空指针问题解决办法在做Android 项目的时候,有时候可能有这样的需求,将一个View
- 如题。3.6 版本的AS,对于活动布局文件的显示有text和view模式,但是切换的按钮位置与之前版本的不同。如下图在右上角的三个按钮点击1
- 本文实例为大家分享了C# this关键字的四种用法,供大家参考,具体内容如下用法一 this代表当前实例,用this.显式调用一