zoukankan      html  css  js  c++  java
  • 015 spel

    一 . 概述

      在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<Date> 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发挥取值的特性,完成一些特殊的任务.

  • 相关阅读:
    定时器应用-最终版
    定时器应用-点击按钮,div向右移动
    通过js读取元素的样式
    延时调用
    定时器应用-切换图片的练习
    BOM对象属性定时器的调用
    BOM浏览器对象模型
    键盘移动
    Python-字符串方法
    Python实现注册和登录
  • 原文地址:https://www.cnblogs.com/trekxu/p/9094855.html
Copyright © 2011-2022 走看看