【问题标题】:How to map a Resource to an enum constant?如何将资源映射到枚举常量?
【发布时间】:2012-07-17 16:24:32
【问题描述】:

我目前正在重构 Spring-MVC 控制器中方法的(前)怪物。该方法基本上做了以下事情:

  1. 从请求中挖掘出一些标识符
  2. 从缓存中获取由它们标识的产品的 XML 表示
  3. 使用 XSL 样式表生成 PDF(然后将其存储到缓存中并将可以找到的密钥添加到 Model)。

我已经能够通过创建一个包含所有其他产品特定内容的Product 枚举来删除几乎所有重复的逻辑,但是 XSL 样式表的位置是有问题的。以前它们被配置为控制器 bean 的org.springframework.core.io.Resource-type 属性,但现在产品特定的东西在枚举中,我要么需要以某种方式将它们映射到枚举常量,要么找到另一个解决方案来定位它们。

我认为最好将 XSL 作为枚举的一部分,因为它们之间存在一对一的关系,但是没有办法在那里注入资源。使用类加载器手动将资源加载到枚举中可以在测试中工作,但在生产环境中会出现问题,因为样式表文件不在类路径中。另外,我不想让枚举依赖于任何 Spring 的东西。

关于如何在不使枚举和控制器过于紧密耦合的情况下解决此问题的任何想法?

【问题讨论】:

    标签: java spring spring-mvc dependency-injection enums


    【解决方案1】:

    最后,我将枚举设为控制器的内部类,并为其添加了一个名为getXsl 的抽象方法。实现枚举常量现在直接返回相关的Resource。我不需要更改任何其他内容,因为 Resource bean 已经是静态的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-08-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-11
      • 2011-04-08
      • 1970-01-01
      相关资源
      最近更新 更多