将解析后的XML对象加载到Spring上下文中

时间:2015-05-06 23:36:35

标签: java xml spring

我有一个给定的XSD和相应的XML。 XML中的常量数据充当我需要处理输入的规则。我正在寻找一种方法,我可以在启动应用程序时解析XML(使用提供的模式),并在弹簧上下文中加载由此生成的常量数据对象。

到目前为止,我并不亲近,但这是我试过的

  1. 为给定的XML / XSD
  2. 写了一个JaxB解析器
  3. XML文件位于类路径中,正在加载和解析以返回Rule对象
  4. <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,但认为这不是我想要的。

    请帮忙。如果我没有明白我的问题,请告诉我。

1 个答案:

答案 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;
}

不要忘记关闭输入流。