All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.biz.common.spel.SpELUtils Maven / Gradle / Ivy

Go to download

BizX 是一个灵活而高效的业务开发框架, 其中也有很多为业务开发所需要的工具类的提供。

The newest version!
package com.biz.common.spel;

import com.biz.common.utils.Common;
import lombok.extern.slf4j.Slf4j;
import org.springframework.expression.ExpressionParser;
import org.springframework.expression.spel.support.StandardEvaluationContext;

/**
 * {@code SpELUtils} 是一个用于处理 Spring Expression Language (SpEL) 表达式的工具类。
 *
 * 

该类提供了解析 SpEL 表达式、创建 SpEL 上下文以及设置上下文变量的功能。

* *

该工具类的主要功能包括:

*
    *
  • {@link #parseExpression(String, StandardEvaluationContext, ExpressionParser, Class)}:解析并评估 SpEL 表达式,返回指定类型的结果。
  • *
  • {@link #createContext(String[], Object[])}:创建一个 {@link StandardEvaluationContext} 实例,并设置变量。
  • *
  • {@link #setVariable(StandardEvaluationContext, String[], Object[])}:根据参数名称和值设置 SpEL 上下文中的变量。
  • *
* * @author francis * @since 1.0.1 **/ @Slf4j public class SpELUtils { /** * 解析给定的 SpEL 表达式,并在指定的上下文中评估表达式,返回结果。 * * @param expression 表达式字符串,不能为 {@code null} 或空字符串 * @param context 表达式评估的上下文,包含变量和函数定义 * @param parser 用于解析表达式的解析器 * @param clazz 期望的结果类型 * @param 结果的泛型类型 * @return 解析和评估后的结果,类型为 {@code clazz} * @throws IllegalArgumentException 如果表达式字符串为空或为 {@code null},则抛出该异常 */ public static T parseExpression(String expression, StandardEvaluationContext context, ExpressionParser parser, Class clazz) { if (Common.isBlank(expression)) { throw new IllegalArgumentException("expressionString must not be null or blank"); } return parser.parseExpression(expression).getValue(context, clazz); } /** * 创建一个 {@link StandardEvaluationContext} 实例,并根据给定的参数名称和值设置变量。 * * @param paramNames 参数名称数组,每个元素表示一个变量的名称 * @param args 参数值数组,每个元素对应 {@code paramNames} 中的一个变量 * @return 创建的 {@link StandardEvaluationContext} 实例,包含设置好的变量 * @throws IllegalArgumentException 如果参数名称数组和参数值数组的长度不一致,则抛出该异常 */ public static StandardEvaluationContext createContext(String[] paramNames, Object[] args) { StandardEvaluationContext context = new StandardEvaluationContext(); setVariable(context, paramNames, args); return context; } /** * 根据参数名称和值设置 {@link StandardEvaluationContext} 实例中的变量。 * * @param standardEvaluationContext 要设置变量的 {@link StandardEvaluationContext} 实例 * @param paramNames 参数名称数组,每个元素表示一个变量的名称 * @param args 参数值数组,每个元素对应 {@code paramNames} 中的一个变量 * @throws IllegalArgumentException 如果参数名称数组和参数值数组的长度不一致,则抛出该异常 */ public static void setVariable(StandardEvaluationContext standardEvaluationContext, String[] paramNames, Object[] args) { if (paramNames.length != args.length) { throw new IllegalArgumentException("The lengths of paramNames and args must be equal"); } for (int i = 0; i < args.length; i++) { standardEvaluationContext.setVariable(paramNames[i], args[i]); } } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy