调用springboot解析spel表达式,可以通过表达式调用ioc容器中的bean或者解析自定义的参数
- applicationContext 是直接通过注入的
@Autowired
private ApplicationContext applicationContext;
- 自定义的参数在表达式中需要在前面加上#
- 调用ioc容器中的bean的方法,不需要加#
// 创建一个表达式解析器
ExpressionParser parser =new SpelExpressionParser();
// 将ioc容器设置到上下文中
StandardEvaluationContext standardEvaluationContext = new StandardEvaluationContext(applicationContext);
standardEvaluationContext.addPropertyAccessor(new BeanFactoryAccessor());
// 创建一些自定义的参数
HashMap<String, Object> params = new HashMap<>();
params.put("name","张三");
params.put("age",18);
// 将自定义参数添加到上下文
standardEvaluationContext.setVariables(params);
Expression expression = parser.parseExpression("#{#name + '的年龄是:' + #age +sysNumberDefService.startNumber() }", new TemplateParserContext());
String expressionValue = expression.getValue(standardEvaluationContext,String.class);
System.out.println(expressionValue);