Spring mvc通过@RequestMapping映射到具体的controller或特定的处理方法上,并且可以在方法里注入各种你需要的参数类型,可以是任意顺序,用起来十分方便。比起其他mvc框架,这已经是一个很大的进步了,基本实现零配置。
但是这也只是个假象,因为每个方法前必须配置@RequestMapping,不然spring的annotationMapping不会帮你做映射的,无法做到真正的零配置。struts2有很多零配置插件,只需添加开启插件即可实现按照默认风格实现零配置。ror更是约定优于配置的典范(虽然我不懂ror)。Spring2.5以前提供MultiActionController将多个请求路径处理方法合并在一个controller里,这样可以把相关功能组合在一起。但是我的处理方法必须符合如下签名:
// 'anyMeaningfulName'指任意方法名
public [ModelAndView | Map | void] anyMeaningfulName(HttpServletRequest, HttpServletResponse [,HttpSession] [,AnyObject])
但是这样并不能像使用@RequestMapping那样,容器帮我注入各种参数类型和返回值。
如果提供一种机制,让spring controller不需再通过@RequestMapping,即可注入许多类型参数,就像MultiActionController通过"controllerName/methodName"的请求路径即可映射到特定的方法上,那spring mvc就可以进一步减少配置量了。当然如果你认为@RequestMapping还提供对请求method的拦截,那么完全可以设置让方法名后面加入相应的GET或者POST。比如:
@Controller("user")
public class UserController {
// @RequestMapping(value="/user/save", method=RequestMethod.POST)
// 无需配置@RequestMapping,同样映射这个路径
public @ResponseBody String save_Post(User user) {
return "";
}
}
甚至像aop那样对方法拦截,默认方法名为save*、update*的使用post,get*、list*使用get。当然这些可能不能满足全部需求,像很多rest风格的url,这时候你还是可以使用@RequestMapping做映射。
我之前想了几种方法希望能达到这些效果,但是都遇到了问题:
1)实现InstantiationAwareBeanPostProcessor接口,在类实例化前,给controller实体类添加@RequestMapping,但是我发现原来java反射是无法改变或者添加注解的,悔恨自己反射机制没认真学啊。
2)扩展AnnotationMethodHandlerAdapter类(spring mvc注解映射是靠这个类完成的)。AnnotationMethodHandlerAdapter实现HandlerAdapter接口,用来①处理请求,解析请求地址,找到controller方法,②最终调用controller方法,返回ModelAndView。而AnnotationMethodHandlerAdapter又把这两个步骤委托给ServletHandlerMethodResolver和ServletHandlerMethodInvoker两个内部类去完成,但是可恨的是这两个内部类都是private的,根本无法扩展。ServletHandlerMethodResolver在resolveHandlerMethod方法解析请求url,然后找到头上有@RequestMapping的类或者方法,将这些方法放入handlerMethods,只有这些方法才会被判断是否符合请求地址。因为ServletHandlerMethodResolver是一个私有内部类,所以要去夸张比较困难,而且几乎很多地方都要重写等于重新写一个自己的AnnotationMethodHandlerAdapter。
以上是我学习spring mvc时的一点疑惑,请哪位高手给点提示,或者能不能有自己心得分享下。
分享到:
相关推荐
《Spring MVC之@RequestMapping详解》 在Java Web开发中,Spring MVC框架因其强大的功能和灵活性而备受青睐。在处理HTTP请求时,@RequestMapping注解扮演着至关重要的角色,它负责将客户端的请求映射到控制器中的...
在Spring MVC框架中,`@RequestMapping`注解是核心组件之一,它用于处理HTTP请求映射,使得控制器类或方法能够与特定的URL路径关联。本文将深入解析`@RequestMapping`的工作原理,并介绍一个简化版的自定义实现,...
在Spring MVC框架中,`@RequestMapping`注解是核心组件之一,它用于处理HTTP请求映射,使得控制器类(Controller)中的方法能够与特定的URL路径关联起来。本篇文章将深入探讨`@RequestMapping`的使用、功能以及相关...
在Spring MVC框架中,`@RequestMapping`、`@RequestParam`和`@PathVariable`是三个非常重要的注解,它们用于处理HTTP请求并绑定请求参数到控制器方法的参数上。接下来,我们将详细探讨这三个注解的工作原理以及如何...
Spring MVC的@RequestMapping注解是核心的控制器层注解,它用于映射HTTP请求到特定的处理方法。在本文中,我们将深入探讨这个注解的各个方面,包括它的使用场景、属性以及如何结合其他注解实现更复杂的请求处理。 ...
使用 Spring 2.5 基于注解驱动的 Spring MVC 详解 本文将介绍 Spring 2.5 新增的 Spring MVC 注解功能,讲述如何使用注解配置替换传统的基于 XML 的 Spring MVC 配置。 Spring MVC 注解驱动 在 Spring 2.5 中,...
Spring MVC 中的 RequestMapping 6个基本用法小结 Spring MVC 是一个基于 Java 的 Web 应用程序框架,提供了强大的 RequestMapping 机制来处理 HTTP 请求。在 Spring MVC 中,RequestMapping 是一个核心组件,负责...
2.Spring MVC @RequestMapping 注解案例 3.Spring MVC 请求参数的获取案例 4.Spring MVC 域对象共享数据案例 5.Spring MVC @ModelAttribute 注解案例 6.Spring MVC 国际化案例 7.Spring MVC 请求转发与请求重定向...
通过这个简单的`springmvc_helloworld`示例,你可以了解`@RequestMapping`注解的基本用法,以及如何在Spring MVC框架下构建一个基本的Web应用。随着对Spring MVC的深入学习,你会发现更多高级特性,如拦截器、异常...
在Spring MVC框架中,`@RequestMapping` 和 `@RequestParam` 是两个非常重要的注解,它们在处理HTTP请求和参数绑定方面起着核心作用。本文将深入探讨这两个注解的使用和功能。 `@RequestMapping` 是Spring MVC用于...
`@RequestMapping`是Spring MVC框架中用于处理HTTP请求映射的注解,而`RequestAttribute`则用于在请求之间传递数据。接下来,我们将详细探讨这两个关键概念及其在实际应用中的使用。 首先,`@RequestMapping`注解是...
Spring 容器管理的 Bean,所以在这里 @Controller 注解起到了标识该类为 Spring MVC 控制器的作用。同时,它还暗示了该 Bean 的作用域,通常默认为 Singleton(单例)。而 @RequestMapping 注解则用来定义请求映射,...
在Spring MVC框架中,`@RequestMapping`注解是核心组件之一,它负责将HTTP请求映射到处理这些请求的方法上。这个注解提供了极大的灵活性,允许开发者以多种方式定义请求映射,从而实现精确的控制和高效的应用程序...
在Spring MVC框架中,注解的使用极大地简化了配置,提高了开发效率。Spring MVC通过注解可以实现控制器、方法映射、模型数据绑定、视图解析等关键功能。本实例将深入探讨Spring MVC中常见的注解及其应用。 1. `@...
此外,Spring MVC 4还支持RESTful风格的Web服务,通过@RequestMapping注解的produces和consumes属性,可以处理不同格式的HTTP请求和响应,如JSON、XML等。 总的来说,"Mastering Spring MVC 4(2015.09)源码"提供了...
@RequestMapping注解是Spring MVC中用于映射HTTP请求到控制器方法的关键工具。它可以应用于类或方法级别,以指定处理特定URL的请求。例如: ```java @Controller @RequestMapping("/users") public class ...
@RequestMapping注解可以用来指定URL模式,而@Controller注解标记一个类作为Spring MVC的控制器。 Spring 4.x引入了更多注解,如@Service和@Repository,以支持依赖注入(DI)。@Service注解用于标记业务逻辑层的...
4. **@RequestMapping注解** 用于映射HTTP请求到控制器方法。可以注解在类级别或方法级别,提供URL模板以匹配特定的HTTP请求。 5. **@Service和@Repository注解** `@Service`注解用于标记业务逻辑层的bean,而`@...
在Spring MVC中,我们可以使用@Controller注解定义一个类作为控制器,@RequestMapping注解用于映射HTTP请求。例如: ```java @Controller public class UserController { @RequestMapping("/users") public ...
@RequestMapping注解用于映射HTTP请求到特定的方法,这极大地提高了代码的可读性和维护性。此外,还可以通过@RequestParam、@PathVariable、@ModelAttribute等注解来处理请求参数,使参数绑定更加方便。 Spring ...