我有一个给定的XSD和相应的XML。 XML中的常量数据充当我需要处理输入的规则。我正在寻找一种方法,我可以在启动应用程序时解析XML(使用提供的模式),并在弹簧上下文中加载由此生成的常量数据对象。
到目前为止,我并不亲近,但这是我试过的
<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,但认为这不是我想要的。
请帮忙。如果我没有明白我的问题,请告诉我。
答案 0 :(得分:1)
定义一个解析xml的@PostConstruct方法。在构造bean和所有自动装配字段之后,Spring将调用该方法。类似的东西:
private Rules rules;
@PostConstruct public void init() {
InputStream io = splitRule.getInputStream();
rules = splitRuleParser.parse(io);
}
public Rules getSplitRule() throws IOException {
return rules;
}
不要忘记关闭输入流。