我有一个给定的 XSD 和相应的 XML。 XML 中的常量数据充当规则,我需要根据这些规则来处理输入。我正在寻找一种方法,可以在启动应用程序时解析 XML(使用提供的架构),并将由此生成的常量数据对象加载到 spring 上下文中。
到目前为止我还没有接近,但这就是我尝试过的
- 为给定的 XML/XSD 编写 JaxB 解析器
- XML 文件位于类路径,正在加载并解析以返回 Rule 对象
<bean id="tcs50MMSplitUtil" class="com.abc.common.SplitRuleService">
<property name="splitRule" value="classpath:config/Rule50MM.xml" />
</bean>
public class SplitRuleService {
private static Resource splitRule;
@Autowired
private RuleXMLParserHandler splitRuleParser;
public Rules getSplitRule() throws IOException {
InputStream io = splitRule.getInputStream();
return (Rules) splitRuleParser.parse(io);
}
public void setSplitRule(Resource splitRule) {
this.splitRule = splitRule;
}
}
但是每次调用 getRule 时都会解析 XML。我不想一次又一次地解析常量 XML。
我还查看了 AbstractBeanDefinitionParser 但认为这不是我想要的。
请帮忙。如果我未能清楚地表达我的问题,请告诉我。
最佳答案
定义解析 xml 的 @PostConstruct 方法。在构建 bean 并设置所有 Autowiring 字段后,Spring 将调用该方法。像这样的东西:
private Rules rules;
@PostConstruct public void init() {
InputStream io = splitRule.getInputStream();
rules = splitRuleParser.parse(io);
}
public Rules getSplitRule() throws IOException {
return rules;
}
不要忘记关闭输入流。
关于java - 将解析后的 XML 对象加载到 Spring 上下文中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30089468/