Spring Boot 2.x实战13 - Spring 5.x基础11 - Spring EL

6 Spring EL

Spring表达式语言(Spring Expression Language简称Spring EL)是在Spring生态下通用的,在运行时使用表达式查询属性信息(使用符号**$)或操作Java对象(使用符号#**),它可以主要使用在XML、注解上。

本节主要使用@Valueorg.springframework.beans.factory.annotation.Value)注解来演示Spring EL的功能,它可以获得表达式计算出来的结果。

6.1 数学运算

我们可以用表达式进行进行数学运算,包括:+-, *, /%^divmod

@Service
public class ValueService {
    @Value("#{1 + 2}") // Java对象操作使用#
    private Integer add;
}
6.2 比较运算

我们可以在表达式中进行比较等操作,包括:<>==!=,<=,>=ltgteqnelege

@Value("#{1 == 2}")
private boolean compare;
6.3 逻辑运算

我们可以在表达式中进行比较等操作,包括:andornot&&||!

@Value("#{1 == 2 || 1 == 1}")
private boolean compareOr;
6.4 条件运算

使用三元运算符?:来进行条件运算。

@Value("#{1 < 2 ? 'wyf' : 'www'}")
private String name;
6.5 正则匹配

使用matches比较是否符合正则表达式。

@Value("#{'1' matches '\\d+' }")
private boolean isNumber;
6.6 调用Bean方法

可以直接用Spring EL来直接调用Bean的方法,如被调用的Bean定义为:

@Service
public class ForValueService {
    public String generate(String name){
        return "Hello " + name;
    }
}

我们可以通过#{bean名.方法名(参数)}来进行调用:

@Value("#{forValueService.generate('wyf')}")
private String beanReturn;
6.7 获得Environment中的属性

Environment可以从外部文件或者操作系统环境变量获取属性信息,如:

@Service
@PropertySource("classpath:author.properties") //1
public class ValueService {
    @Value("${author.name}") //2
    private String authorName;

    @Value("${os.name}") //3
    private String osName;
    
}
  1. 通过@PropertySource加载配置文件中的属性信息到Environment中;
  2. 查询属性使用符号** **,格式为: ` (属性名)`;
  3. 同样获得操作系统环境变量信息的方式与2一致。

上面完整的代码如下:

@PropertySource("classpath:author.properties")
public class ValueService {
    @Value("#{1 + 2}")
    private Integer add;

    @Value("#{1 == 2}")
    private boolean compare;

    @Value("#{1 == 2 || 1 == 1}")
    private boolean compareOr;

    @Value("#{1 < 2 ? 'wyf' : 'www'}")
    private String name;

    @Value("#{'1' matches '\\d+' }")
    private boolean isValidNumber;

    @Value("#{forValueService.generate('wyf')}")
    private String beanReturn;

    @Value("${author.name}")
    private String authorName;

    @Value("${os.name}")
    private String osName;

    public void doSomething(){
        System.out.println("数学运算add的值是:" + add);
        System.out.println("逻辑运算compare的值是" + compare);
        System.out.println("逻辑运算compareOr的值是" + compareOr);
        System.out.println("条件运算name的值是:" + name);
        System.out.println("正则匹配isValidNumber的值是:" + name);
        System.out.println("调用Bean的返回值beanReturn值是:" + beanReturn);
        System.out.println("属性查询外部配置文件authorName值是:" + authorName);
        System.out.println("属性查询操作系统环境变量authorName值是:" + osName);
    }
}

JavaConfig进行结果检验:

@Bean
CommandLineRunner valueClr(ValueService valueService){
    return args -> valueService.doSomething();
}

在这里插入图片描述
新书推荐:
我的新书《从企业级开发到云原生微服务:Spring Boot 实战》已出版,内容涵盖了丰富Spring Boot开发的相关知识
购买地址:https://item.jd.com/12760084.html

在这里插入图片描述

主要包含目录有:

第一章 初识Spring Boot(快速领略Spring Boot的美丽)
第二章 开发必备工具(对常用开发工具进行介绍:包含IntelliJ IDEA、Gradle、Lombok、Docker等)
第三章 函数式编程
第四章 Spring 5.x基础(以Spring 5.2.x为基础)
第五章 深入Spring Boot(以Spring Boot 2.2.x为基础)
第六章 Spring Web MVC
第七章 数据访问(包含Spring Data JPA、Spring Data Elasticsearch和数据缓存)
第八章 安全控制(包含Spring Security和OAuth2)
第九章 响应式编程(包含Project Reactor、Spring WebFlux、Reactive NoSQL、R2DBC、Reactive Spring Security)
第十章 事件驱动(包含JMS、RabbitMQ、Kafka、Websocket、RSocket)
第11章 系统集成和屁股里(包含Spring Integration和Spring Batch)
第12章 Spring Cloud与微服务
第13章 Kubernetes与微服务(包含Kubernetes、Helm、Jenkins、Istio)
多谢大家支持。

发布了116 篇原创文章 · 获赞 10 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/wiselyman/article/details/105734444