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的主要内容,如果未能解决你的问题,请参考以下文章

VSCode自定义代码片段——CSS选择器

谷歌浏览器调试jsp 引入代码片段,如何调试代码片段中的js

片段和活动之间的核心区别是啥?哪些代码可以写成片段?

VSCode自定义代码片段——.vue文件的模板

VSCode自定义代码片段6——CSS选择器

VSCode自定义代码片段——声明函数