xxw1754352621 / java-dev

愿景:提升自我知识容量,扩展自我知识边界
Apache License 2.0
6 stars 2 forks source link

SpEL表达式 #6

Open xxw1754352621 opened 5 years ago

xxw1754352621 commented 5 years ago

SpEL表达式的spring 运用 @ConditionalOnExpression

http://ifeve.com/spring-6-spel/

xxw1754352621 commented 5 years ago

spring spel的使用 https://docs.spring.io/spring/docs/5.0.0.M5/spring-framework-reference/html/expressions.html#expressions-language-ref

xxw1754352621 commented 5 years ago

note 1: 使用 ExpressionParser 基于 ParserContext 将字符串解析为 Expression,Expression 再根据 EvaluationContext 计算表达式的值。

note 2:

在单独使用SpEL时需要创建解析器、解析表达式、以及求值上下文和对应的根对象。但是在实际使用过程中、更常用的使用方式是只需要在配置文件里面配置SpEL字符串表达式即可,例如针对Spring Bean或者Spring Web Flow的定义。在这种场景下解析器,求值上下文,根对象和任何事先定义的变量都会被容器默认创建好,用户除了写表达式不需要做任何其他事情。

note 3: StandardEvaluationContext创建相对比较耗资源,在重复多次使用的场景下内部会缓存部分中间状态加快后续的表达式求值效率。因此建议在使用过程中尽可能被缓存和重用,而不是每次在表达式求值时都重新创建一个对象。

spring 3.0后做法:

解释器 private ExpressionParser expressionParser;

缓存 解析表达式 private final Map<String, Expression> expressionCache = new ConcurrentHashMap<>(256);

缓存 表达式解析上下文 private final Map<BeanExpressionContext, StandardEvaluationContext> evaluationCache = new ConcurrentHashMap<>(8);