(十九)Class类型表达式

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





猜你喜欢

转载自blog.csdn.net/qq1019648709/article/details/80504706