博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
015 spel
阅读量:5239 次
发布时间:2019-06-14

本文共 1894 字,大约阅读时间需要 6 分钟。

一 . 概述

  在spring3.x之中提出了spel的方式,其目的就是在静态语言之中增加动态语言的能力.

实际上我们可以和IOC容器实现一些特别的功能.


 二 . 简单的演示

@Test    public void test() {        //创建一个spel的表达式解析器        ExpressionParser parser = new SpelExpressionParser();        //解析一个表达式,返回一个表达式对象        Expression expression = parser.parseExpression("1 + 1");        //添加执行上下文        EvaluationContext context = new StandardEvaluationContext();        //获取结果        Object value = expression.getValue(context);        System.out.println(value);    }

三 . 介绍

我们在这里不对spel的基本语法进行一些列的介绍,因为这个根本没有意思.

  我们最感兴趣还是对反射的支持.  

@Test    public void test() throws Exception {        //创建一个spel的表达式解析器        ExpressionParser parser = new SpelExpressionParser();        //解析一个表达式,返回一个表达式对象        Expression expression = parser.parseExpression("T(java.util.Date)");        //添加执行上下文        EvaluationContext context = new StandardEvaluationContext();        //获取结果        @SuppressWarnings("unchecked")        Class
value = expression.getValue(context,Class.class); Date date = value.newInstance(); System.out.println(date); }

在这里我们使用了T(字符串形式的全类名),就可以获得到了Class字节码对象.

另外一个问题,就是我们是否可以支持获取对象的属性,就像ognl那样的方式.

  在spel之中使用#标示从根对象之中获取.

@Test    public void test() throws Exception {        User user = new User();        user.setAge("12");        user.setName("trek");                //创建一个spel的表达式解析器        ExpressionParser parser = new SpelExpressionParser();        //解析一个表达式,返回一个表达式对象        Expression expression = parser.parseExpression("#user.name");        //添加执行上下文        EvaluationContext context = new StandardEvaluationContext();        context.setVariable("user", user);        //获取结果        System.out.println(expression.getValue(context));    }

现在我们就可以实现了ognl表达式那么的功能了.


 四 .总结

  spel的功能很强大,但是我们实际的使用过程中如果不封装一下的话,那么使用就会非常的痛苦,毕竟不是所有的人都会使用.

  一般情况下,我们可以通过注解的方式配合spel发挥取值的特性,完成一些特殊的任务.

转载于:https://www.cnblogs.com/trekxu/p/9094855.html

你可能感兴趣的文章
【设计模式】装饰者模式
查看>>
修改优先级(类写法)
查看>>
golang数据类型二
查看>>
给谷歌浏览器添加网页翻译插件
查看>>
Leaflet 中 删除 一个 标记(Marker)
查看>>
[翻译博文]线性隐层单元并不存在
查看>>
【ZH奶酪】为什么Python不需要函数重载?
查看>>
字节流文件拷贝工具类
查看>>
Timestamp 数据类型四舍五入引起的神奇bug
查看>>
24.如何结束返回值是void的方法
查看>>
Android 将ARGB图片转换为灰度图
查看>>
File
查看>>
廖雪峰 JavaScript 学习笔记(函数)
查看>>
公司聚餐 职场人应注意的事项
查看>>
eclipse内部Javadoc怎么汉化成中文
查看>>
[算法天天练]选择排序
查看>>
ZOJ3602:Count the Trees
查看>>
C# 设计模式(一)
查看>>
Azure 负载均衡器的多个 VIP
查看>>
网页基础知识
查看>>