在之前所见到的都是最基础的表达式,与其程序的结构是相同的,但是在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());
}
}
利用字符串完整的实现了反射机制的各种操作,它的操作不能能很智能化,只能够处理很简单的功能.