`
fhjxp
  • 浏览: 54084 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

通过修改Spring的源码,String MVC 0配置又进了一步

    博客分类:
  • java
阅读更多

《Spring mvc去掉@RequestMapping注解》 试图做的事情,我自己通过修改Spring的源码终于去掉这个配置。我自己搭建的框架时一直追求“习惯约定优于配置”,看看Spring MVC常见的做法如下。

@Controller
@RequestMapping("/User")
public class UserAction {

	@Resource
	private UserBo userBo;	
	
	@RequestMapping("/list/{pageSize}/{pageNo}")
	public String list(@PathVariable int pageSize, @PathVariable  int pageNo) {
		//具体业务代码,省略
	}
}
 

根据我的命名习惯UserAction默认就应该是“/User”,list方法默认也就是"/list",参数也应该按照参数的顺序那样写。所以说@RequestMapping的声明完全是多余的。

 

我找不到如何通过配置文件来实现自动映射,只好翻看Spring的源码,终于找到了解决办法,修改了两个类:org.springframework.core.annotation.AnnotationUtils和org.springframework.web.bind.annotation.support.HandlerMethodInvoker。修改后的代码见附件。

补充一个类的代码:

package org.springframework.util;

import java.lang.annotation.Annotation;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

public class RequestMappingImpl implements RequestMapping {

	private final String[] headers;

	private final String[] params;

	private final RequestMethod[] method;

	private final String[] value;

	public RequestMappingImpl(String vlaue) {
		params = headers = new String[0];
		method = new RequestMethod[0];
		this.value = new String[] { vlaue };
	}

	public RequestMappingImpl(String vlaue, RequestMapping requestMapping) {
		params = requestMapping.params();
		headers = requestMapping.headers();
		method = requestMapping.method();
		this.value = new String[] { vlaue };
	}

	@Override
	public String[] headers() {
		return headers;
	}

	@Override
	public RequestMethod[] method() {
		return method;
	}

	@Override
	public String[] params() {
		return params;
	}

	@Override
	public String[] value() {
		return value;
	}

	@Override
	public Class<? extends Annotation> annotationType() {
		return RequestMapping.class;
	}

}
 
分享到:
评论
8 楼 fhjxp 2011-05-23  
tiyi 写道
org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping
搞定一切

使用这个达不到我想要的0配置效果,每个方法仍然要加上RequestMapping的注解。里面的url倒可以不写了。
7 楼 tiyi 2011-01-30  
org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping
搞定一切
6 楼 wangchangbing 2010-12-31  
http://code.google.com/p/paoding-rose/
5 楼 long502147 2010-12-31  
gtssgtss 写道
public abstract class ControllerTemplate extends BaseController {

	//@RequestMapping()0配置
	public ModelAndView maybeAGoodName(Object value){
		//To do something;
	}
}

@Controller
//@RequestMapping0配置,没问题
public class A extends ControllerTemplate {
	//maybeAGoodName 不错,不用改了
}

@Controller
//@RequestMapping0配置,没问题
public class B extends ControllerTemplate {
	//maybeAGoodName 想换个名字,哦0配置了,只好继续maybeAGoodName,或者加个方法,调用maybeAGoodName 
}


lz没说他改了以后是可配置还是不可配置,我当是不可配置了

楼主昨天给我说过是可以配置的,原理大概是这样的!如果没有就(按一定规则)动态生成一个RequestMapping,如果已经配置了 就用当前配置好的RequestMapping!这样比较灵活!遵守规则,就可以少写代码,不遵守也行!
4 楼 gtssgtss 2010-12-31  
public abstract class ControllerTemplate extends BaseController {

	//@RequestMapping()0配置
	public ModelAndView maybeAGoodName(Object value){
		//To do something;
	}
}

@Controller
//@RequestMapping0配置,没问题
public class A extends ControllerTemplate {
	//maybeAGoodName 不错,不用改了
}

@Controller
//@RequestMapping0配置,没问题
public class B extends ControllerTemplate {
	//maybeAGoodName 想换个名字,哦0配置了,只好继续maybeAGoodName,或者加个方法,调用maybeAGoodName 
}


lz没说他改了以后是可配置还是不可配置,我当是不可配置了
3 楼 long502147 2010-12-31  
gtssgtss 写道
过分追求0配置,会影响代码复用的

可不可以举个例说说看!
2 楼 xiangkun 2010-12-30  
gtssgtss 写道
过分追求0配置,会影响代码复用的



+1
1 楼 gtssgtss 2010-12-30  
过分追求0配置,会影响代码复用的

相关推荐

    spring_MVC源码

    弃用了struts,用spring mvc框架做了几个项目,感觉都不错,而且使用了注解方式,可以省掉一大堆配置文件。本文主要介绍使用注解方式配置的spring mvc,之前写的spring3.0 mvc和rest小例子没有介绍到数据层的内容,...

    spring mvc MultiActionController配置方法源码

    尽管如此,理解`MultiActionController`的配置和工作原理对于理解Spring MVC的历史以及如何向更现代的实践迁移仍然是有益的。 `MultiActionController`是Spring MVC中的一个抽象类,它继承自`AbstractController`。...

    spring MVC配置,六步简单搞定

    这篇博客“spring MVC配置,六步简单搞定”可能介绍了如何快速且有效地设置Spring MVC项目。下面将详细阐述Spring MVC配置的六个关键步骤,以及与之相关的知识点。 **步骤1:引入Spring MVC依赖** 在开始Spring MVC...

    Java EE 框架整合 开发入门到实战-Spring+Spring MVC+MyBatis微课版复习笔记

    - 控制反转是Spring框架的核心,它通过描述(如XML配置或注解)由第三方(Spring容器)生成或获取被依赖的实例,从而实现对象之间的解耦,减少程序间依赖,提升模块化程度。 - 依赖注入是IoC的一种表现形式,它从...

    spring mvc 读取配置文件

    最后,Spring Boot简化了配置过程,通过`application.properties`或`application.yml`进行集中式配置,并自动配置Spring MVC组件。它还提供了命令行参数、环境变量和配置服务器等多种方式来动态获取配置。 总的来说...

    spring mvc系列教程源码

    在Spring MVC中,MyBatis可以通过Spring的`SqlSessionFactoryBean`和`MyBatisSqlSessionFactoryBean`配置,结合`@Mapper`注解的接口,实现DAO层的简单易用。 5. **Freemarker**: Freemarker是一个模板引擎,用于...

    Spring MVC Helloword代码

    2. **配置DispatcherServlet**:在`web.xml`中配置DispatcherServlet,并指定Spring MVC的配置文件位置。 3. **创建Spring MVC配置**:创建一个XML文件(如`servlet-context.xml`),配置HandlerMapping、...

    Spring MVC Controller配置方式

    本文将详细介绍 Spring MVC 中 Controller 的配置方式。 一、注解式配置 1.1 @Controller 注解 @Controller 是 Spring MVC 提供的一个核心注解,用于标记一个类作为 MVC 控制器。当 Spring 容器启动时,会扫描带有...

    spring3 MVC 入门hello world源码

    **Spring3 MVC 入门Hello World源码解析** Spring3 MVC是Spring框架的重要组成部分,它是一个用于构建Web应用程序的模型-视图-控制器(MVC)框架。本篇将深入探讨Spring3 MVC的基础知识,通过"Hello World"实例来...

    Spring Mvc实例

    Spring MVC 是一个基于Java的轻量级Web应用框架,它是Spring框架的重要组成部分,主要用于构建Web应用程序的后端控制器。在本实例中,我们将探讨如何利用Spring MVC的注解来简化前后台交互,以及如何实现简单视图...

    spring mvc源码实例

    Spring MVC 是一个基于Java的轻量级Web应用框架,它为构建RESTful应用程序提供了强大的支持。这个源码实例应该是为了帮助开发者深入...通过分析这些源码,开发者可以更深入地理解Spring MVC的工作流程,提升开发技能。

    Spring 3.0 mvc 简单跳转 实例 源码

    通过阅读这些源码,可以更深入地理解Spring MVC的运行机制和页面跳转流程。 总的来说,Spring 3.0 MVC的简单跳转实例展示了如何使用Controller处理请求,通过视图解析器解析返回的视图名,实现页面间的重定向或转发...

    Spring MVC 实例

    Spring MVC 会使用配置的 `ViewResolver` 来查找对应的物理视图,如 JSP 页面。 ```java @GetMapping("/{id}") public String getUser(@PathVariable Long id, Model model) { User user = userService....

    Spring MVC Locale 的使用 中文 英文 等语言 切换

    首先,我们需要在Spring MVC的配置文件中声明`LocaleResolver`。`LocaleResolver`是Spring MVC用来解析和设置`Locale`的接口。最常用的实现是`CookieLocaleResolver`和`SessionLocaleResolver`。`...

    Eclipse配置SpringMVC源码

    在本文中,我们将深入探讨如何在Eclipse集成开发环境中配置SpringMVC的源码,以便进行深入学习和开发。SpringMVC是Spring框架的一部分,它为构建基于Java的Web应用程序提供了一个模型-视图-控制器(MVC)架构。...

    Spring MVC简单示例

    通过分析这些文件,你可以更直观地学习如何配置和运行一个基本的Spring MVC应用。 总结来说,Spring MVC提供了一种强大的方式来构建Web应用程序,它的注解驱动和模块化设计使得开发过程更加简洁和高效。通过阅读...

    Spring MVC入门(登录示例)

    通过阅读 Spring MVC 的源码,我们可以深入理解其实现原理,例如 DispatcherServlet 如何分发请求,HandlerMapping 如何找到合适的 Controller 方法,以及视图如何被渲染等。 ### 9. 工具支持 开发过程中,IDEA、...

    spring mvc demo

    在这个"spring mvc demo"中,我们将会探索Spring MVC的核心概念和它如何通过注解简化开发过程。 1. **Spring MVC 概述** Spring MVC是Spring框架的一部分,提供了模型-视图-控制器(MVC)架构,帮助开发者分离业务...

    Spring mvc 环境搭建(maven构建)

    2. 创建 `src/main/webapp/WEB-INF/spring/appServlet/servlet-context.xml` 文件,配置 Spring MVC: ```xml &lt;beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi=...

    spring mvc 简单demo

    Spring MVC 是一个基于Java的轻量级Web应用框架,它为构建RESTful应用程序提供了强大的支持。这个简单的Demo将向我们展示如何使用Spring MVC创建一个基本的Web应用。在这个过程中,我们将涉及控制器、视图解析器、...

Global site tag (gtag.js) - Google Analytics