SpEL表达式使用场景

  1. 字面量和简单表达式

• 字符串拼接

【java】
ExpressionParser parser = new SpelExpressionParser();
String result = (String) parser.parseExpression("'Hello, ’ + ‘World!’").getValue(String.class);
System.out.println(result); // 输出: Hello, World!

• 数值运算

【java】
int result = (Integer) parser.parseExpression(“2 + 3 * 2”).getValue(Integer.class);
System.out.println(result); // 输出: 8

  1. 属性访问

• 访问对象的属性

【java】
public class Person {
private String name;
private int age;
// Getters and Setters
}

Person person = new Person();
person.setName(“John Doe”);
person.setAge(30);

StandardEvaluationContext context = new StandardEvaluationContext(person);
String name = (String) parser.parseExpression(“name”).getValue(context, String.class);
int age = (Integer) parser.parseExpression(“age”).getValue(context, Integer.class);

System.out.println("Name: " + name); // 输出: Name: John Doe
System.out.println("Age: " + age); // 输出: Age: 30

  1. 方法调用

• 调用对象的方法

【java】
public class Calculator {
public int add(int a, int b) {
return a + b;
}
}

Calculator calculator = new Calculator();
StandardEvaluationContext context = new StandardEvaluationContext(calculator);
int result = (Integer) parser.parseExpression(“add(10, 20)”).getValue(context, Integer.class);

System.out.println("Result: " + result); // 输出: Result: 30

  1. 集合操作

• 访问集合中的元素

【java】
List list = Arrays.asList(“apple”, “banana”, “cherry”);
StandardEvaluationContext context = new StandardEvaluationContext();
context.setVariable(“list”, list);

String firstItem = (String) parser.parseExpression("#list[0]").getValue(context, String.class);
boolean containsBanana = (Boolean) parser.parseExpression("#list.contains(‘banana’)").getValue(context, Boolean.class);

System.out.println("First Item: " + firstItem); // 输出: First Item: apple
System.out.println("Contains Banana: " + containsBanana); // 输出: Contains Banana: true

  1. 条件表达式

• 条件判断

【java】
Person person = new Person();
person.setName(“John Doe”);
person.setAge(30);

StandardEvaluationContext context = new StandardEvaluationContext(person);
boolean isAdult = (Boolean) parser.parseExpression(“age >= 18”).getValue(context, Boolean.class);
String greeting = (String) parser.parseExpression(“age >= 18 ? ‘Hello, adult’ : ‘Hello, child’”).getValue(context, String.class);

System.out.println("Is Adult: " + isAdult); // 输出: Is Adult: true
System.out.println("Greeting: " + greeting); // 输出: Greeting: Hello, adult

  1. 变量引用

• 引用上下文中的变量

【java】
StandardEvaluationContext context = new StandardEvaluationContext();
context.setVariable(“name”, “Alice”);
context.setVariable(“age”, 25);

String greeting = (String) parser.parseExpression(“name + ’ is ’ + age + ’ years old’”).getValue(context, String.class);

System.out.println("Greeting: " + greeting); // 输出: Greeting: Alice is 25 years old

  1. 类型转换

• 类型转换

【java】
String numberStr = “123”;
int number = (Integer) parser.parseExpression(“T(Integer).parseInt(#numberStr)”).getValue(new StandardEvaluationContext(), Integer.class);

System.out.println("Number: " + number); // 输出: Number: 123

  1. 注解中的SpEL表达式

• 在注解中使用SpEL表达式

假设你有一个方法需要根据传入的用户对象生成锁的键,你可以在注解中使用SpEL表达式来实现:

【java】
public class SysUser {
private String username;
// Getter and Setter
}

@Service
public class MyService {
// 假设这里有一个需要加锁的方法
public void someMethod(@LockKey("#user.username") String lockKey) {
// 方法实现
}
}

// 自定义注解
@Target(ElementType.PARAMETER)
@Retention(RetentionPolicy.RUNTIME)
public @interface LockKey {
String value();
}

在上面的示例中,@LockKey注解中的#user.username就是一个SpEL表达式,它会在运行时被解析为传入someMethod方法的SysUser对象的username属性。

这些示例展示了SpEL在不同场景下的应用,包括字面量表达式、属性访问、方法调用、集合操作、条件表达式、变量引用、类型转换以及在注解中使用SpEL表达式等。通过这些示例,你可以更好地理解SpEL的语法和功能,并在实际开发中灵活运用它。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值