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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值