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

标签 java xml spring

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

到目前为止我还没有接近,但这就是我尝试过的

  1. 为给定的 XML/XSD 编写 JaxB 解析器
  2. 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/

相关文章:

java - 有什么方法可以屏蔽运行时进入 jText 区域的值,并且如果按住退格键则应清除内容

xml - phobos 的 std.xml 的状态是什么

c# - WebApi 强制操作返回 xml

java - Spring 3+。通过占位符中的前缀解析属性

java - 如何使用联合运算符连接 sql 查询

java - 使用正则表达式从字符串中删除方括号?

xml - XSD: "restriction--pattern"标签的转义字符是什么

java - 由 : org. hibernate.MappingException 引起:无法加载配置中声明为 <mapping class ="xxxxx"/> 的类:

java - Bean创建异常: No factory method found

java - 添加 JPA 后 Spring Boot 关闭