如何将资源映射到枚举常量?

时间:2012-07-17 16:24:32

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

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

  1. 从请求中删除一些标识符
  2. 从缓存中获取由它们标识的产品的XML表示
  3. 使用XSL样式表生成PDF(然后将其存储到缓存中,并将可以找到的密钥添加到Model)。
  4. 我已经能够通过制作包含所有其他产品特定内容的Product枚举来删除几乎所有重复的逻辑,但是XSL样式表的位置存在问题。以前它们被配置为控制器bean的org.springframework.core.io.Resource - 类型属性,但是现在产品特定的东西都在枚举中,我要么以某种方式将它们映射到枚举常量,要么找到另一种解决方案来定位它们。

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

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

1 个答案:

答案 0 :(得分:0)

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