WTF?Spring EL还能做规则引擎?
你没有看错,Spring EL不仅能做规则引擎,我还在生产环境大范围的使用了。
为什么要用Spring EL做规则引擎?
相对于别的规则引擎,Spring EL更加轻量级,学习成本更低,与函数式编程配合表现可能超乎你的想象!
我在生产中的应用
背景
之前做过一个财务系统,财务系统需要跟供应商做结算,由于我方在合作中处于弱势地位,导致供应商很多非分的要求我们也需要去满足,再加上供应商的数量非常多,并且结算规则的变化非常的快,因此需要设计的非常的灵活,如果用传统硬编码的方式去做,可能导致代码逻辑异常复杂,而且需要改动得非常频繁。
为了解决这个问题,我打算引入脚本引擎去简化开发,降低系统复杂度,在考察过后,最终决定用Spring EL。
如何做
首先,我们先来定义一个结算的基础对象
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Order {
private String userId;
private Integer age;
//是否是新客
private Boolean isNew;
private LocalDate orderDate;
private BigDecimal price;
}
复制代码
如果有一个供应商有一条结算规则是分成订单金额的80%,我们可以这样计算