我的应用程序需要了解映射的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);
我不确定这种方法的缺点,但会欣赏任何建议。
答案 0 :(得分:0)
除了您提到的从Web层到服务层的映射中注入的方法之外,我无法想到一个不同的解决方案。这里很少有设计问题,您可能已经注意到 - 关于服务层依赖于Web层,我可以想到几种方法来缓解这个问题:
从处理程序映射中提取所需内容(比如简单Map<String, String>
,并将其单独注入服务层,这样至少可以减少依赖关系。
将特定服务移至Web层,这样与Web相关的依赖关系保留在Web层中。