zoukankan      html  css  js  c++  java
  • 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表达式使用率没有这么高. 所以这里不再进一步讨论了.

  • 相关阅读:
    Aurora 数据库支持多达五个跨区域只读副本
    Amazon RDS 的 Oracle 只读副本
    Amazon EC2 密钥对
    DynamoDB 读取请求单位和写入请求单位
    使用 EBS 优化的实例或 10 Gb 网络实例
    启动 LAMP 堆栈 Web 应用程序
    AWS 中的错误重试和指数退避 Error Retries and Exponential Backoff in AWS
    使用 Amazon S3 阻止公有访问
    路由表 Router Table
    使用MySQLAdmin工具查看QPS
  • 原文地址:https://www.cnblogs.com/no-celery/p/14918788.html
Copyright © 2011-2022 走看看