我目前正在 Spring-MVC Controller 中重构一个(以前的)怪物方法。该方法主要执行以下操作:
- 从请求中挖掘一些标识符
- 从缓存中获取由他们标识的产品的 XML 表示形式
- 使用 XSL 样式表生成 PDF(然后将其存储到缓存中,并将可用于找到它的 key 添加到
模型
中)。
我已经能够通过创建一个包含所有其他特定于产品的内容的 Product
枚举来删除几乎所有重复的逻辑,但是 XSL 样式表的位置是有问题的。以前它们被配置为 Controller bean 的 org.springframework.core.io.Resource 类型属性,但现在产品特定的东西在枚举中,我要么需要以某种方式将它们映射到枚举常量或找到另一个解决方案来定位它们。
我认为最好将 XSL 作为枚举的一部分,因为它们之间存在一对一的关系,但无法在那里注入(inject)资源。使用类加载器手动将资源加载到枚举在测试中可以工作,但在生产环境中会出现问题,因为样式表文件不在那里的类路径中。另外,我不想让枚举依赖于任何 Spring 的东西。
关于如何解决这个问题而不使枚举和 Controller 过于紧密耦合有什么想法吗?
最佳答案
最后,我将枚举作为 Controller 的内部类,并向其中添加了一个名为 getXsl
的抽象方法。实现枚举常量现在直接返回相关的Resource
。我不需要更改任何其他内容,因为 Resource
beans 已经是静态的。
关于java - 如何将资源映射到枚举常量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11526796/