【发布时间】:2012-12-11 03:25:55
【问题描述】:
如何反射性地获取所有控制器的列表(最好不仅是带注释的,而且在 xml 中指定),匹配 Spring MVC 应用程序中的某些特定 url?
如果只有注释,
@Autowired
private ListableBeanFactory listableBeanFactory;
...
whatever() {
Map<String,Object> beans = listableBeanFactory.getBeansWithAnnotation(RequestMapping.class);
// iterate beans and compare RequestMapping.value() annotation parameters
// to produce list of matching controllers
}
可以使用,但是在更一般的情况下,当控制器可以在 spring.xml 配置中指定时该怎么办?以及如何处理请求路径参数?
【问题讨论】:
-
您打算如何使用这些信息? Spring Tool Suite 将在 IDE 中为您提供此信息。否则,这是我写的一个实用程序:github.com/kdgregory/pathfinder(我将在本周晚些时候合并一些更新)
-
我正在尝试为我的 Web 应用程序实现动态菜单系统。我不需要静态分析源代码(我的想法已经做得很好了),我需要在运行时进行反思。
-
您打算如何在 XML 配置中找到相关的控制器?也许您可以在运行时访问
org.springframework.web.bind.annotation.support.HandlerMethodResolver.getHandlerMethods()并处理返回的方法。 -
Ralph 的回答没有给您想要的吗?我的想法是扫描您的 bean 以查找
DefaultAnnotationHandlerMapping,然后拉出它的映射图,但由于我没有尝试过,所以这不是答案。另一种方法是检查已注册的 bean 的注释,但这有一些曲折。
标签: java spring spring-mvc reflection