当前位置: 首页 > 面试题库 >

如何在Spring MVC中找到所有控制器?

斜向文
2023-03-14
问题内容

为了提供一些运行时生成的API文档,我想遍历所有Spring MVC控制器。所有控制器都使用Spring @Controller注释进行注释。目前我是这样的:

for (final Object bean: this.context.getBeansWithAnnotation(
        Controller.class).values())
{
    ...Generate controller documentation for the bean...
}

但是这个代码的第一个电话是EXTREMELY缓慢。我想知道Spring是否迭代类路径中的所有类,而不是仅检查定义的bean。运行上述代码时,控制器已经加载,日志显示了所有控制器及其请求映射,因此Spring MVC必须已经了解所有控制器,并且必须有一种更快的方法来获取它们的列表。但是如何?


问题答案:

几个月前,我也遇到了这样的要求,并使用以下代码段实现了这一要求。

ClassPathScanningCandidateComponentProvider scanner = new ClassPathScanningCandidateComponentProvider(false);
        scanner.addIncludeFilter(new AnnotationTypeFilter(Controller.class));
        for (BeanDefinition beanDefinition : scanner.findCandidateComponents("com.xxx.yyy.controllers")){
            System.out.println(beanDefinition.getBeanClassName());
        }

你也可以使用控制器执行类似的操作。

更新了代码段。删除了不必要的代码,仅显示了控制器的类名,以更好地理解。希望这对你有帮助。干杯。



 类似资料:
  • 我想使用@SessionAttributes注释在SpringMVC中的两个控制器之间共享会话属性。 下面是我用来测试属性共享的一个简单代码:AController。JAVA a.jsp BController.java b.jsp 我期望的行为是转到 /aURL,myParam将被设置为0到99之间的随机值,然后该值将在两个控制器之间共享。 但是,会发生以下情况:我转到/a URL,myPara

  • 我正在使用Spring形式。我只需要得到Staemap作为响应,但我得到的是整个jsp页面作为响应。

  • 我正在从一个示例项目中研究Spring Boot。它的应用如下所示。 在控制器包中有一个控制器。

  • 在chrome/Firefox控制台中找到xpath,但在selenium中找不到?有什么建议吗? Java代码双向: 以下是硒的作用: 线程“main”组织中出现异常。openqa。硒。TimeoutException:预期条件失败:等待元素可单击:按。xpath:/html1/body1/div2/div1/div1/div2/div2/div1/div3/div1/div[4]/div2/t

  • 问题内容: 我有一个非标准的Spring MVC项目。用XML响应。是否可以创建一个视图(jsp页面),以显示所有接受的(不是必需的)控制器,映射和参数。 根据答案,我有: 我没有得到任何信息 问题答案: 随着Spring 3.1,你可以轻松浏览端点。 The controller : The view : 你也可以在Spring <3.1中使用代替。但是你不会获得相同级别的信息。 有了它们,你将

  • 问题内容: 我有控制器映射和: 我想分别通过URL 和访问这些URL 。 如何在Spring Boot中实现这一目标? 问题答案: 您可以在自定义配置中提供到Spring Boot应用程序的根上下文路径的映射。 或将此添加到您的in 文件夹中 编辑 从Spring Boot 2.x开始,该属性已被弃用,应替换为 您可以在此处找到更多的内容Spring Boot Context Root, 并在此处