SpringBoot 使用SpringEL表达式

网友投稿 930 2022-09-07

SpringBoot 使用SpringEL表达式

SpringBoot 使用SpringEL表达式

@Value

此注解, 我们用的最多的是读取配置文件属性的:

@Value("${database.dirverName}")String driverName;

这里的@Value中的${...}代表占位符, 它会读取上下文的属性值装配到属性中, 这就是一个最简单的SpringEL表达式, 通过SpringEL可以拥有更强大的运算规则来更好的装配Bean.

它能够调用方法, 例如, 我们记录一个Bean的初始化时间:

@Value("#{T(System).currentTimeMillis()}")private Long initTime = null;

注意, 这里采用的#{...}代表启用SpringEL表达式, 它将具有运算功能, T(...)代表的是引入类, System是java.lang.*包的类, 这是java默认加载的包, 因此可以省略不写全限定类名, 如果是其他包, 需要写出全限定类名才能引用类. currentTimeMillis是它的静态方法, 也就是调用了一次System.currentTimeMillis()方法来为这个属性赋值.

此外还可以直接为属性赋值, 如下:

// 赋值字符串@Value("#{'使用SpringEL赋值字符串'}")private String str = null;// 科学计数法赋值@Value("#{9.3E3}")private double d;// 赋值浮点数@Value("#{3.14}")private float pi;

虽然这比较灵活, 但有时候我们还可能去获取其他Spring Bean的属性来给当前的Bean属性赋值, 例如:

@Value("#{beanName.str}")private String otherBeanProp = null;

注意, 这里的beanName是Spring Ioc容器中某个Bean的名称, str是Bean的属性, 代表引用对应的Bean的属性str赋值给当前属性.有时候, 我们还希望这个属性的字母赋值时候全部变为大写, 这时候就可以写成:

@Value("#{beanName.str?.toUpperCase()}")private String otherBeanProp = null;

再次注意这里的EL表达式, 这里引用的str后面跟着一个 ? , 这个符号?的含义是判断这个属性是否为空, 如果不为空才去执行后面的方法toUpperCase方法, 进而把属性变为大写, 赋值给当前属性.除此之外, 还可以使用SpringEL进行一定的运算, 如下:

// 数学运算@Value("#{1+2}")private int run;// 浮点数比较运算@Value("#{beanName.pi==3.14f}")private bolean piFlag;// 字符串比较@Value("#{beanName.str eq 'Spring Boot'}")private boolean strFlag;// 字符换连接@Value("#{beanName.str + ' 连接字符串'}")private String strApp = null;// 三目运算@Value("#{beanName.d > 1000 ? '大于' : '小于'}")private String resultDesc = null;

SpringEL能够支持的运算还有很多, 其中等值比较如果是数字的可以使用==比较, 如果是字符串的可以使用 eq 进行比较, 当然, EL的内容远远不止这些, 只是其他的EL表达式使用率没有这么高. 所以这里不再进一步讨论了.

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:win10配置Docker Quickstart Terminal镜像源
下一篇:数据库SQL SELECT查询的工作原理(数据库sql server)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~