在之前所见到的都是最基础的表达式,与其程序的结构是相同的,但是在Spring里面对于Class反射机制也有自己的表达式处理,
No | 表达式 | 结果 | 计算结果 |
1 | Class | Expression exp = parpser.parseExpression("T(String)"); Expression exp = parpser.parseExpression("T(java.util.Date)"); |
Class<String> Class<java.util.Date> |
2 | 静态 属性 |
Expression exp = parpser.parseExpression("T(Integer).MAX_VALUE"); |
2147483647 |
3 | 静态 方法 |
Expression exp = parpser.parseExpression("T(Integer).parseInt(\"123\")"); |
Wed May 30 09:27:44 GMT+08:00 2018 |
4 | 实例化 | Expression exp = parpser.parseExpression("new String('hello')"); |
hello |
5 | instanceof | Expression exp = parpser.parseExpression("'hello' instanceof T(String)"); |
true |
使用"T(类)"的形式可以取得一个指定泛型类型的Class对象;
范例:取得Class类型的对象
package cn.zwb.demo; import org.springframework.expression.EvaluationContext; import org.springframework.expression.Expression; import org.springframework.expression.ExpressionParser; import org.springframework.expression.spel.standard.SpelExpressionParser; import org.springframework.expression.spel.support.StandardEvaluationContext; public class TestELSimple { public static void main(String[] args) { ExpressionParser parpser = new SpelExpressionParser(); Expression exp = parpser.parseExpression("T(String)"); EvaluationContext context=new StandardEvaluationContext(); Class<String> clsClass=exp.getValue(context,Class.class); System.out.println(clsClass); } }
如果调用的静态属性则使用"T(类型),静态属性名称" .
范例:调用Integer类中的MAX_VALUE属性
package cn.zwb.demo; import org.springframework.expression.EvaluationContext; import org.springframework.expression.Expression; import org.springframework.expression.ExpressionParser; import org.springframework.expression.spel.standard.SpelExpressionParser; import org.springframework.expression.spel.support.StandardEvaluationContext; public class TestELSimple { public static void main(String[] args) { ExpressionParser parpser = new SpelExpressionParser(); Expression exp = parpser.parseExpression("T(Integer).MAX_VALUE"); EvaluationContext context=new StandardEvaluationContext(); System.out.println(exp.getValue()); } }
既然静态属性可以调用了也可以调用静态方法.,例如Integer类里面存在有一个parsInt()的static方法,此方法可以接收一个字符串同时返回一个int类型的数据.
范例:调用Integer.parseInt()方法.
package cn.zwb.demo; import org.springframework.expression.EvaluationContext; import org.springframework.expression.Expression; import org.springframework.expression.ExpressionParser; import org.springframework.expression.spel.standard.SpelExpressionParser; import org.springframework.expression.spel.support.StandardEvaluationContext; public class TestELSimple { public static void main(String[] args) { ExpressionParser parpser = new SpelExpressionParser(); Expression exp = parpser.parseExpression("T(Integer).parseInt(\"123")"); EvaluationContext context=new StandardEvaluationContext(); System.out.println(exp.getValue()); } }
虽然给出了静态操作.但是严格来讲使用最多的情况一定是类产生实例化对象,呢么依然可以使用同样的方式完成,可以直接使用"new 类型()"的方式来实例化对象
范例:实例化Date类对象
package cn.zwb.demo; import org.springframework.expression.EvaluationContext; import org.springframework.expression.Expression; import org.springframework.expression.ExpressionParser; import org.springframework.expression.spel.standard.SpelExpressionParser; import org.springframework.expression.spel.support.StandardEvaluationContext; public class TestELSimple { public static void main(String[] args) { ExpressionParser parpser = new SpelExpressionParser(); Expression exp = parpser.parseExpression("new java.util.Date()"); EvaluationContext context=new StandardEvaluationContext(); System.out.println(exp.getValue()); } }
但是现在所调用的只是无惨构造,如果有需要也可以调用有参构造
范例:调用有参构造
package cn.zwb.demo; import org.springframework.expression.EvaluationContext; import org.springframework.expression.Expression; import org.springframework.expression.ExpressionParser; import org.springframework.expression.spel.standard.SpelExpressionParser; import org.springframework.expression.spel.support.StandardEvaluationContext; public class TestELSimple { public static void main(String[] args) { ExpressionParser parpser = new SpelExpressionParser(); Expression exp = parpser.parseExpression("new String('hello')"); EvaluationContext context=new StandardEvaluationContext(); System.out.println(exp.getValue()); } }
在对象的开发过程之中,也可以进行实例化对象类型的判断
范例:判断一个字符串是否是String的实例化
package cn.zwb.demo; import org.springframework.expression.EvaluationContext; import org.springframework.expression.Expression; import org.springframework.expression.ExpressionParser; import org.springframework.expression.spel.standard.SpelExpressionParser; import org.springframework.expression.spel.support.StandardEvaluationContext; public class TestELSimple { public static void main(String[] args) { ExpressionParser parpser = new SpelExpressionParser(); Expression exp = parpser.parseExpression("'hello' instanceof T(String)"); EvaluationContext context=new StandardEvaluationContext(); System.out.println(exp.getValue()); } }利用字符串完整的实现了反射机制的各种操作,它的操作不能能很智能化,只能够处理很简单的功能.