如何在服务中获取mvc RequestMappingHandlerMapping引用?

时间:2013-08-24 04:36:42

标签: spring spring-mvc

我的应用程序需要了解映射的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可以查询它。

如果在root-context之后加载MVC上下文,我怎么能完成这个?

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

在Controller中添加了一个@PostConstruct,我调用了apiService.registerHandlersMapping(handlerMapping);

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

1 个答案:

答案 0 :(得分:0)

除了您提到的从Web层到服务层的映射中注入的方法之外,我无法想到一个不同的解决方案。这里很少有设计问题,您可能已经注意到 - 关于服务层依赖于Web层,我可以想到几种方法来缓解这个问题:

  1. 从处理程序映射中提取所需内容(比如简单Map<String, String>,并将其单独注入服务层,这样至少可以减少依赖关系。

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