2015-05-06 46 views
0

我有給定的XSD和相應的XML。 XML中的常量數據充當規則的基礎,我需要處理輸入。我正在尋找一種方法,可以在啓動應用程序時解析XML(使用提供的模式),並讓生成的常量數據對象在spring上下文中加載。將分析的XML對象加載到Spring上下文中

到目前爲止,我不敢靠近,但是這是我嘗試

  1. 寫了JAXB解析器給定XML/XSD
  2. 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,但認爲這不是我想要的。

請任何幫助。如果我不清楚我的問題,請告訴我。

回答

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

不要忘記關閉輸入流。

+0

感謝您的回覆唐!它爲我工作:)最初我想在課堂上創建一個靜態塊來做到這一點,但PostConstruct對於這種情況非常適用。 – mehta

相關問題