【问题标题】:@Controller annotation and Controller Classes in Spring MVCSpring MVC 中的@Controller 注解和控制器类
【发布时间】:2015-04-30 10:03:30
【问题描述】:

当我使用 Spring 3.x 时 在使用注释时,我很难知道我们将使用此 @Controller 获取哪种类型的 Controller 类 参考

http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/servlet/mvc/Controller.html

这些是实现Controller类

AbstractController
AbstractUrlViewController
MultiActionController
ParameterizableViewController
ServletForwardingController
ServletWrappingController
UrlFilenameViewController
AbstractWizardFormController
SimpleFormController

但是,当我们在 Spring MVC 中使用 @Controller 注解时 程序如何知道我们的@Controller 注解正在实现 这些控制器中的任何一个,请任何人解释我

【问题讨论】:

  • @ControllerController 完全不同,你没有得到它们,也不应该混合它们,因为它们的行为完全不同!

标签: java spring spring-mvc


【解决方案1】:

我认为你在这里没有抓住重点。过去注册控制器,你的类必须实现控制器接口并选择请求映射类型。有时您必须实现大量代码才能实现单个请求映射。

如今,当我们有注释时,模型已经改变。我们可以为每个控制器类处理多种请求类型。因为在单个 @Controller 注释类中,我们可以处理许多请求映射。

Controller 注解是一个专门的@Component,它告诉Spring 在它里面会找到@RequestMapping 处理程序。这些处理程序可用于返回 Json、HTML 或上传文件。

现在可以将与同一个模块连接的逻辑放在单个控制器类下,您可以更灵活地实现您想要实现的目标。其次,@Controller 使我们能够显着减少代码数量。

【讨论】:

  • 如果我需要 AbstractWizardFormController 那么 Spring 是如何理解我需要这个的,如果我在单个 java 代码中需要两个或多个控制器怎么办。
  • 试试这个教程:codejava.net/frameworks/spring/…
【解决方案2】:

您没有使用任何这些类。您将Controller 接口与注释混淆了。

注解只是一个标记,表明你的 bean 是一个 Spring Controller 并且可以发送一个接收 HTTP 请求。 http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/stereotype/Controller.html

Controller 接口是在 Java 语言中没有注解时引入的。

【讨论】:

    【解决方案3】:

    我们将使用它获取哪种类型的控制器类 @控制器?

    @Controller 注释是告诉 Web 容器,这是带有 @RequestMapping(URI) 指定 URL 的请求的控制器类。如果你用 @Controller 注释你的类,你将不会获取任何类,你只需要在类中提供一个请求处理程序方法并用 @RequestMapping 注释它,尽管控制器类也可以用 @RequestMapping 注释在这种情况下,只有类中的方法才能作为请求处理方法。

    如何知道我们的@Controller 注解正在实现任何 这些控制器?

    您提到的类的名称正在实现 Controller 接口,而不是@Controller 注释正在实现任何东西。这些控制器类用于特定目的,正如它们的名字所暗示的那样。

    【讨论】:

    • 好的,我同意..所以如果我需要 AbstractWizardFormController 是否可以使用 @Controller 或实现 AbstractWizardFormController?
    • 你必须扩展 AbstractWizardFormController 类。(你知道它是一个抽象类以及抽象是如何有用的)
    • 你能接受这个答案吗?如果它满足你。@MSIbrahim
    • 我会把它交给你..但是..目前正在使用 Spring 3.0 和 Spring Sec 3.x 在这种情况下我应该如何使用扩展 AbstractWizardFormController。它正在抛出 ClassNotFoundException.. 有一个版本崩溃
    • 您可能缺少一些 jar 文件或使用不同版本的 jar。
    猜你喜欢
    • 2012-11-04
    • 1970-01-01
    • 1970-01-01
    • 2011-02-17
    • 2010-12-30
    • 2010-10-27
    • 1970-01-01
    • 1970-01-01
    • 2014-11-06
    相关资源
    最近更新 更多