洞察探索open banking如何通过小程序容器技术助力金融企业实现数据安全和数字化转型
986
2022-09-07
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小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~