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

标签 java spring spring-mvc dependency-injection enums

我目前正在 Spring-MVC Controller 中重构一个(以前的)怪物方法。该方法主要执行以下操作:

  1. 从请求中挖掘一些标识符
  2. 从缓存中获取由他们标识的产品的 XML 表示形式
  3. 使用 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/

相关文章:

java - Spring MVC (4.3.3) - RestController 使用直接字段访问获取请求参数

java - Springs CustomDateEditor 引诱犯错误?

java - 如何使用java8流一对一地比较两个列表元素的相等性?

Spring云流0​​x104567910

java.lang.IllegalStateException : Neither BindingResult nor plain target object for bean name 'user' available as request attribute 错误

java - 在 Spring Web 应用程序中放置 gruntfile 的位置

java - 了解 Spring 3.0 示例中的 Ajax 简化

java - 如何正确施法?

java - 如何在java上整齐地提取子路径以考虑根文件夹和无根文件夹

java - 如何连接桌面 java 应用程序和在线 mysql 数据库并执行查询?