南充网站建设略奥,化工营销型网站,做好一个网站后,沂南网站建设Spring 核心特性之表达式(SpEL)_spring spel-CSDN博客 -- 写的还行
关于SpEL的几个概念#xff1a;
表达式#xff08;“干什么”#xff09;#xff1a;SpEL的核心#xff0c;所以表达式语言都是围绕表达式进行的。解析器#xff08;“谁来干”#xff09;#xff1…Spring 核心特性之表达式(SpEL)_spring spel-CSDN博客 -- 写的还行
关于SpEL的几个概念
表达式“干什么”SpEL的核心所以表达式语言都是围绕表达式进行的。解析器“谁来干”用于将字符串表达式解析为表达式对象。上下文“在哪干”表达式对象执行的环境该环境可能定义变量、定义自定义函数、提供类型转换等等。root根对象及活动上下文对象“对谁干”root根对象是默认的活动上下文对象活动上下文对象表示了当前表达式操作的对象。
可以使用 #variableName 的形式引用变量变量在 EvaluationContext#setVariable 上进行设置变量名只能包含字母 A到Za 到z、数字 0 到 9、下划线 _ 以及美元符号 $。变量使用示例如下。 //调用对象属性值
public static void main(String[] args) {// Create and set a calendarGregorianCalendar c new GregorianCalendar();c.set(1856, 7, 9);//构造一个对象, The constructor arguments are name, birthday, and nationality.Inventor tesla new Inventor(Nikola Tesla, c.getTime(), Serbian);ExpressionParser parser new SpelExpressionParser();//对应方法: Object getValue(Nullable Object rootObject)Expression exp parser.parseExpression(name); // Parse name as an expressionString name (String) exp.getValue(tesla);System.out.println(name);// name Nikola Teslaexp parser.parseExpression(name Nikola Tesla);boolean result exp.getValue(tesla, Boolean.class);System.out.println(result);// result true} //设置全局参数, 参数取值
public static void main(String[] args) {ExpressionParser parser new SpelExpressionParser();//#end 变量取值Expression expression parser.parseExpression((Hello World).concat(#end));EvaluationContext context new StandardEvaluationContext();context.setVariable(end, !);System.out.println(expression.getValue(context));} #被调用方法
public class CustomFunctions {public static boolean isMember(String name) {// 在这里编写检查是否为会员的逻辑这里只是一个示例if (name.equals(Mihajlo Pupin)) {return true;} else {return false;}}
} //spel表达式中, 调用方法参数
public static void main(String[] args) {
// 方式1:
// StandardEvaluationContext context new StandardEvaluationContext();
// context.registerFunction(isMember, CustomFunctions.class.getDeclaredMethod(isMember, String.class)); //注册自定义函数// 方式2:EvaluationContext context SimpleEvaluationContext.forReadOnlyDataBinding().build();context.setVariable(isMember, CustomFunctions.class.getDeclaredMethod(isMember, String.class));//通过变量方式执行方法SpelExpressionParser parser new SpelExpressionParser();boolean isMember parser.parseExpression(#isMember(Mihajlo Pupin1)).getValue(context, Boolean.class);System.out.println(isMember);} // 调用Bean 中的方法
public static void main(String[] args) {/*** 调用Bean 中的方法* 如果解析上下文已经配置那么bean解析器能够 从表达式使用符号查找bean类。*/// 1.创建表达式解析器ExpressionParser parser new SpelExpressionParser();// 2.创建变量上下文,设置变量StandardEvaluationContext ctx new StandardEvaluationContext();// 此处用DefaultListableBeanFactory做测试,系统运行时可传入ApplicationContextDefaultListableBeanFactory beanFactory new DefaultListableBeanFactory();beanFactory.registerSingleton(user, new CustomFunctions(成龙));ctx.setBeanResolver(new BeanFactoryResolver(beanFactory));// 3. spel解析器执行表达式取得结果System.out.println(parser.parseExpression(user.getName()).getValue(ctx, String.class));
}