2

我的应用程序需要了解映射的 URL,因为用户名或其他资源类型将被动态映射。

即使能够获得当前的映射,我也可以在控制器上进行:

@Autowired
RequestMappingHandlerMapping handlerMapping;

public void showHandlersMapping() {
    Map<RequestMappingInfo,HandlerMethod> map = handlerMapping.getHandlerMethods();
    Iterator<?> it = map.entrySet().iterator();
    while (it.hasNext()) {
        Map.Entry pairs = (Map.Entry)it.next();
        System.out.println(pairs.getKey() + " = " + pairs.getValue());
    }       
} 

但我想在其中引用它,root-context以便其他 bean 可以查询它。

一旦 MVC 上下文在根上下文之后加载,我怎么能做到这一点?

我的解决方案(直到现在):

在我调用 apiService.registerHandlersMapping(handlerMapping); 的控制器中添加了一个 @PostConstruct

我不确定这种方法的缺点,但会感谢任何建议。

4

1 回答 1

0

除了您提到的注入从 Web 层到服务层的映射的方法之外,我想不出其他解决方案。这里几乎没有设计问题,您可能已经注意到了 - 关于服务层依赖于 Web 层,我可以想出一些方法来缓解这种情况:

  1. 从处理程序映射中提取您需要的本质(比如简单地说,Map<String, String>并将其单独注入服务层,这样至少减少了一点依赖关系。

  2. 将特定服务移至 Web 层,这样与 Web 相关的依赖项将保留在 Web 层中。

于 2013-08-24T13:42:46.460 回答