spring-expression-02
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spring-expression-02相关的知识,希望对你有一定的参考价值。
root 变量
public static void main(String[] args) throws Exception { //将一整个语句直接定义了字符串 ,其中对字符串的开始索引与结束索引使用替代变量 Method met = Integer.class.getMethod("parseInt", String.class) ; String str = "#root"; //1定义一个专属的表达式解析工具 ExpressionParser parser = new SpelExpressionParser() ; //2定义一个表达式处理类 Expression exp = parser.parseExpression(str); //3进行最终的表达式计算中进行替代棉量内容的设置 EvaluationContext context = new StandardEvaluationContext("mldn") ; //这里的值将会设置到root里//4通过表达式进行结果计算 Object num = exp.getValue(context ,Object.class); System.out.println(num); }
方法
public static void main(String[] args) throws Exception { //将一整个语句直接定义了字符串 ,其中对字符串的开始索引与结束索引使用替代变量 Method met = Integer.class.getMethod("parseInt", String.class) ; String str = "#myInt(‘123‘)"; //1定义一个专属的表达式解析工具 ExpressionParser parser = new SpelExpressionParser() ; //2定义一个表达式处理类 Expression exp = parser.parseExpression(str); //3进行最终的表达式计算中进行替代棉量内容的设置 EvaluationContext context = new StandardEvaluationContext() ; context.setVariable("myInt", met); //4通过表达式进行结果计算 Object num = exp.getValue(context ,Object.class); System.out.println(num); }
root的属性
public static void main(String[] args) throws Exception { String str = "Time"; //字面内容 time ,如果不做什么的话就从根变量root取得属性 ,调用的是get方法! ExpressionParser parser = new SpelExpressionParser() ; Expression exp = parser.parseExpression(str); EvaluationContext context = new StandardEvaluationContext(new Date()) ; Object num = exp.getValue(context ,Object.class); System.out.println(num); }
public static void main(String[] args) throws Exception { String str = "#root?.Time"; //gloovy安全运算! 这种代码将可以避免null带来的问题 ExpressionParser parser = new SpelExpressionParser() ; Expression exp = parser.parseExpression(str); EvaluationContext context = new StandardEvaluationContext() ; Object num = exp.getValue(context ,Object.class); System.out.println(num); }
使用Bean
package cn.mldn.vo; import java.io.Serializable; public class Message implements Serializable { private String info ; public String getInfo() { return info; } public void setInfo(String info) { this.info = info; } }
<bean id="msg" class="cn.mldn.vo.Message">
<property name="info" value="Hello World !!!"></property>
</bean>
public static void main(String[] args) throws Exception { ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml"); String str = "@msg.getInfo()"; //表示引用配置文件中的bean的方法 ExpressionParser parser = new SpelExpressionParser() ; Expression exp = parser.parseExpression(str); StandardEvaluationContext context = new StandardEvaluationContext() ; //如果要映入bean的内容,那么就必须定义一个Bean的解析工厂类。而这个不在 EvaluationContext接口之中存在 //只能够使用StandardEvaluationContext子类完成 context.setBeanResolver(new BeanFactoryResolver(ctx)); //引用容器中的内容 Object num = exp.getValue(context ,Object.class); System.out.println(num); }
集合
public static void main(String[] args) throws Exception { String str = "{10,20,30}"; //用Collections 实现集合的 。此时是一个不可修改内容的集合 ExpressionParser parser = new SpelExpressionParser() ; Expression exp = parser.parseExpression(str); EvaluationContext context = new StandardEvaluationContext() ; Object num = exp.getValue(context ,Object.class); System.out.println(num); }
public static void main(String[] args) throws Exception { String str = "{10,20,30}[1]"; //使用索引进行访问 ExpressionParser parser = new SpelExpressionParser() ; Expression exp = parser.parseExpression(str); EvaluationContext context = new StandardEvaluationContext() ; Object num = exp.getValue(context ,Object.class); System.out.println(num); }
public static void main(String[] args) throws Exception { List<Integer> all = new ArrayList<Integer>(); all.add(10); all.add(20); String str = "#allData[1]"; //设置操作表达式 ,索引依然不能操过集合的长度 ExpressionParser parser = new SpelExpressionParser() ; Expression exp = parser.parseExpression(str); EvaluationContext context = new StandardEvaluationContext() ; context.setVariable("allData", all); //设置可变长度集合 Object num = exp.getValue(context ,Object.class); System.out.println(num); }
public static void main(String[] args) throws Exception { Set<Integer> all = new LinkedHashSet<Integer>(); all.add(10); all.add(20); String str = "#allData[1]"; //设置操作表达式 ,索引依然不能操过集合的长度 ExpressionParser parser = new SpelExpressionParser() ; Expression exp = parser.parseExpression(str); EvaluationContext context = new StandardEvaluationContext() ; context.setVariable("allData", all); //设置可变长度集合 Object num = exp.getValue(context ,Object.class); System.out.println(num); }
public static void main(String[] args) throws Exception { Map<String,String> all = new HashMap<String,String>(); all.put("laoli", "shuai ge"); all.put("hello", "java"); String str = "#allData[‘laoli‘]"; //设置操作表达式 , ExpressionParser parser = new SpelExpressionParser() ; Expression exp = parser.parseExpression(str); EvaluationContext context = new StandardEvaluationContext() ; context.setVariable("allData", all); // Object num = exp.getValue(context ,Object.class); System.out.println(num); }
public static void main(String[] args) throws Exception { List<Integer> all = new ArrayList<Integer>(); all.add(10); all.add(20); String str = "#allData[1]=90"; //直接拿表达式修改集合内容 all的内容被修改了 ExpressionParser parser = new SpelExpressionParser() ; Expression exp = parser.parseExpression(str); EvaluationContext context = new StandardEvaluationContext() ; context.setVariable("allData", all); //设置可变长度集合 Object num = exp.getValue(context ,Object.class); System.out.println(num); System.out.println(all); }
public static void main(String[] args) throws Exception { Map<String,String> all = new HashMap<String,String>(); all.put("laoli", "shuai ge"); all.put("hello", "java"); String str = "#allData[‘laoli‘]=‘cao bu yao lian de‘"; //设置操作map的内容,all的内容被修改了 ExpressionParser parser = new SpelExpressionParser() ; Expression exp = parser.parseExpression(str); EvaluationContext context = new StandardEvaluationContext() ; context.setVariable("allData", all); // Object num = exp.getValue(context ,Object.class); System.out.println(num); System.out.println(all); }
public static void main(String[] args) throws Exception { List<Integer> all = new ArrayList<Integer>(); all.add(10); all.add(20); String str = "#allData.![1000+#this]"; //迭代修改 ,修改的内容在num中(返回的新的集合) ExpressionParser parser = new SpelExpressionParser() ; Expression exp = parser.parseExpression(str); EvaluationContext context = new StandardEvaluationContext() ; context.setVariable("allData", all); //设置可变长度集合 Object num = exp.getValue(context ,Object.class); System.out.println(num); System.out.println(all); }
public static void main(String[] args) throws Exception { Map<String,String> all = new HashMap<String,String>(); all.put("laoli", "shuai ge"); all.put("hello", "java"); String str = "#allData.![#this.key+":" + #this.value]"; //设置操作map的内容,修改的内容在num中(返回的新的集合) ExpressionParser parser = new SpelExpressionParser() ; Expression exp = parser.parseExpression(str); EvaluationContext context = new StandardEvaluationContext() ; context.setVariable("allData", all); // Object num = exp.getValue(context ,Object.class); System.out.println(num); System.out.println(all); }
public static void main(String[] args) throws Exception { Map<String,String> all = new HashMap<String,String>(); all.put("laoli", "shuai ge"); all.put("hello", "java"); //key包含有hel的数据 String str = "#allData.?[#this.key.contains(‘el‘)]"; //实现过滤操作 .? ExpressionParser parser = new SpelExpressionParser() ; Expression exp = parser.parseExpression(str); EvaluationContext context = new StandardEvaluationContext() ; context.setVariable("allData", all); // Object num = exp.getValue(context ,Object.class); System.out.println(num); System.out.println(all); }
配置文件操作
<bean id="str" class="java.lang.String"> <constructor-arg value="HelloWorld"/> </bean> <bean id="msgB" class="cn.mldn.vo.Message"> <property name="info" value="#{str.substring(0,5) + ‘ mldn‘}"></property> </bean>
public class Message implements Serializable { private String info ; public String getInfo() { return info; } public void setInfo(String info) { this.info = info; } }
public static void main(String[] args) throws Exception { ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml"); Message msgB = ctx.getBean("msgB",Message.class); System.out.println(msgB.getInfo()); }
配置annotation
@Component public class Message implements Serializable { @Value("#{str.substring(0,5) + ‘ mldn‘}") private String info ; public String getInfo() { return info; } public void setInfo(String info) { this.info = info; } }
以上是关于spring-expression-02的主要内容,如果未能解决你的问题,请参考以下文章