自学内容网 自学内容网

Spring 中的 StandardBeanExpressionResolver

StandardBeanExpressionResolver 是用来对配置文件,或者其他地方的 Spel 表达式进行计算的,我们在配置的时候,有可能配置了一个表达式,而不是配置的最终结果,这时候Spring就需要对我们配置的表达式进行计算得到结果。比如我们配置一天有多少分钟可能会配置 ${24*60}这时候Spring需要算出这个结果。

1.SpelExpressionParser

SpelExpressionParser是Spring中真正执行表达式计算的组件,StandardBeanExpressionResolver最终也是调用 SpelExpressionParser 进行计算
@Test
public void spelExpressionParser() {

    SpelExpressionParser spelExpressionParser = new SpelExpressionParser();
    Expression expression = spelExpressionParser.parseExpression("10*20");
    System.out.println(expression.getExpressionString() + "=" + expression.getValue());

}

运行结果:
10*20=200

2.StandardBeanExpressionResolver

StandardBeanExpressionResolver 主要就是通过配置的expressionPrefix,expressionSuffix 识别出一个字符串中有哪些表达式,然后将解析出来的表达式交给SpelExpressionParser计算出结果
@Test
public void standardBeanExpressionResolver(){

    StandardBeanExpressionResolver standardBeanExpressionResolver = new StandardBeanExpressionResolver();

    SpelExpressionParser spelExpressionParser = new SpelExpressionParser();

    standardBeanExpressionResolver.setExpressionParser(spelExpressionParser);
    standardBeanExpressionResolver.setExpressionPrefix("${");
    standardBeanExpressionResolver.setExpressionSuffix("}");

    DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory();
    BeanExpressionContext beanExpressionContext = new BeanExpressionContext(beanFactory , new SimpleThreadScope());

    Object evaluate = standardBeanExpressionResolver.evaluate("aaa ${10*20} bbb", beanExpressionContext);

    System.out.println(evaluate);
}

运行结果:
aaa 200 bbb


原文地址:https://blog.csdn.net/weixin_42286658/article/details/143572767

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!