切入点表达式的注解配置_SpEL(Spring表达语言)表达式详述

78e6a9f69b5e2c59f0ac0d8a1f249874.png

SpEL概述

SpEL全称是Spring Expression Language是一种强大的表达式语言。在Spring产品组合中,它是表达式计算的基础。它支持在运行时查询和操作对象图,它可以与基于XML和基于注解的Spring配置还有bean定义一起使用。由于它能够在运行时动态分配值,因此可以为我们节省大量Java代码。

SpEL使用场景

  1. 在注解@Value中
@Data
public class User {
    
    @Value("#{'张三'}")
    private String userName;
    private String mobile;
    private String pwd;
    private int age;
    private String[] hobby;
    private Map<String,String> map;

}
  1. 在XML配置中
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    
    
    <bean id="helloService" class="com.example.demo.service.HelloService">
        <!-- 同@Value,#{}内是表达式的值,可放在property或constructor-arg内 -->
        <property name="arg" value="#{'hello world'.toUpperCase()}">
    </bean>
    


</beans>
  1. 在代码块中使用Expression(不是很常见,我在项目中几乎没有用到过)
@Test
public void test(){
    //创建ExpressionParser解析表达式
    ExpressionParser parser = new SpelExpressionParser();
    Expression exp = parser.parseExpression("表达式");
    //执行表达式,默认容器是spring本身的容器:ApplicationContext
    Object value = exp.getValue();
    System.out.println(value);
}

SpEL表达语法

1.字面量表达式

  1. 整数
#{123456}
  1. 浮点数
#{3.1415159}
  1. 布尔值
#{true}
  1. 字符串
#{'张三'}
  1. 集合
#{{'吃饭','睡觉','d打豆豆'}}
  1. map和对象
#{{'k1':'victory','k2':'haha'}}

2.调用java代码

  1. 直接使用new
#{new com.example.demo.entity.User()}
#{}

  1. 使用T(Type)
#{T(Double).MIN_VALUE}
  1. 方法调用,和java代码差不多
#{'abc'.toUpperCase()}
  1. 安全保证,对上面调用方法的补充 ,为了避免操作对象本身可能为null,取属性时报错,定义语法 语法: “对象?.变量|方法”
#{'123'?.toUpperCase()}

3. 运算符表达式

1. 算术表达式
#{1+2-6*2}

2. 比较表达式
#{1>3}

3. 逻辑表达式
#{1!=2 && 2<3}

4.赋值表达式(是代码块中使用的,自测@Value中不好用)
#{#variableName=value}

5. 三目表达式(“表达式1?表达式2:表达式3”)
#{1!=2 && 2<3 ? '吃饭':'睡觉'}
#{2!=null?2:3}等价于#{2?:3}后者称为Elvis运算符,可以避免null值报错的情况

6.正则表达式
#{'123'.matches('d{3}')}

4.集合的操作

  1. 集合访问:"集合[索引]"和"map[key]"
#{{'吃饭','睡觉','打豆豆'}[0]}
#{{'k1':'吃饭','k2':'睡觉','k3':'打豆豆'}[k3]}
  1. 集合的查询投影
".?[]":从集合中查询所有满足条件的
#{cities.?[population gt 2e7]} 

“.^[]”:从集合中查询第一个匹配项
#{cities.^[population gt 2e7]}"

“.$[]”:从集合中查询最后一个匹配项。
#{cities.$[population gt 2e7]}"

".![]":投影运算符
#{cities.![name]}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值