`
fhjxp
  • 浏览: 53311 次
  • 性别: 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源代码解析

    对于一个Spring激活的web应用程序,可以通过使用Spring代码声明式的指定在web应用程序启动时载入应用程序上下文(WebApplicationContext),Spring的ContextLoader是提供这样性能的类,我们可以使用 ...

    Spring MVC注解与数据绑定(含源码及结果图)

    1、有如下一个订单信息页面order.jsp(置于/WEB-INF/jsp目录下),按以下步骤实现一个使用POJO...(5)配置springmvc-config.xml文件。 (6)创建一个result.jsp结果页面(置于/WEB-INF/jsp目录下),用于显示接收到订单信息。

    基于SSM的爬虫系统,Spring+Spring MVC+MyBatis+Druid+Redis+MQ.zip

    可以用于毕业设计(项目源码+项目说明)目前在window10/11测试环境一切正常,用于演示的图片和部署教程说明都在压缩包里

    springmybatis

    mybatis实战教程mybatis in action之六与Spring MVC 的集成 mybatis实战教程mybatis in action之七实现mybatis分页源码下载 mybatis实战教程mybatis in action之八mybatis 动态sql语句 mybatis实战教程mybatis in ...

    JAVA上百实例源码以及开源项目源代码

    Java 源码包 Applet钢琴模拟程序java源码 2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这款实例会对你有所帮助。 Calendar万年历 1个目标文件 EJB 模拟银行ATM流程及操作源代码 6个目标文件,EJB来...

    JAVA上百实例源码以及开源项目

     Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...

    org.springframework.web.servlet-3.1.0.RELEASE

    是源代码,不是jar文件!!!!! /** * Holder for both Model and View in the web MVC framework. * Note that these are entirely ... * @see org.springframework.web.servlet.mvc.Controller#handleRequest */

    springmvc整合jdbc简单的用户管理

    String sql = "insert into person(first_name, last_name, money,pass_word) values (?,?,?,?)"; Object[] obj = { person.getFirstName(), person.getLastName(), person.getMoney() , ...

    积分管理系统java源码-knowledge:这是我的知识,包括我所有已知的

    积分管理系统java源码 基础知识 java基础 基本类型(占用的内存)和包装类型 数组和对象 程序控制语句,if、switch、while、for 包、接口和抽象类 异常处理 多线程编程、线程池、fork-join、并发编程 annotation ...

    基于J2EE框架的个人博客系统项目毕业设计论文(源码和论文)

    由于J2EE的开源的框架中提供了MVC模式实现框架Struts、对象关系模型中的Hibernate 的框架及拥有事务管理和依赖注入的Spring。利用现存框架可以更快开发系统。所以选择Java技术作为blog 的开发工具。 为了增加系统的...

    解决spring mvc 返回json数据到ajax报错parseerror问题

    最近使用ajax接收spring mvc传过来的json数据时总是出现parseerror的错误,错误源码如下: 前端: $.ajax({ type: 'POST', url: "groupFunctionEdit", dataType: 'json', contentType: "application/json", ...

    基于SSM框架+Mysql的企业CRM客户关系管理系统项目源码+数据库+项目说明.zip

    【资源说明】 1、该资源包括项目的全部源码,下载可以直接使用! 2、本项目适合作为计算机、数学、... 文件上传用到MultipartFile类,需要引入相关插件并在MVC配置文件中配置multipartResolver解析器bean 2. 将thy

    JPA代码生成器

    JPA代码生成器 1.生成domain dao ,service, mvc文件 ...4.运行方法:JDBCCodeGenerator ,修改public static void main(String[] args) 中的String tableName 的值,就可以根据表名生成对应的JAVA文件

    EL表达式 (详解)

    在EL中,这四个隐含对象只能用来取得范围属性值,即getAttribute(String name),却不能取得 其他相关信息。 例如:我们要取得session中储存一个属性username的值,可以利用下列方法: session.getAttribute(...

    Big-Data-Interview:大数据面试知识点

    目录Linux、IOLinux基础IO分布式分布式理论数据结构与算法RedisRedis基础redis内部数据结构Git操作系统数据库MeavnHBaseHiveSpark面试计算机网络Spring面试RedisElasticsearch分布式JVM设计模式多线程JDK数据结构...

    最新Java面试题视频网盘,Java面试题84集、java面试专属及面试必问课程

    │ Java面试题50.Spring MVC的执行流程.mp4 │ Java面试题51.SpringMVC和Struts2的不同.mp4 │ Java面试题52.简单介绍一下Spring或者Spring的两大核心.mp4 │ Java面试题53.AOP是什么?都用它做什么?.mp4 │ Java...

    java面试题

    73.7. spring的事务如何配置 77 73.8. transaction有那几种实现(事务处理)(Spring) 79 73.9. Spring IoC 79 73.10. Spring AOP面向方面编程 82 74. 项目中为什么使用SSH 85 75. Spring在SSH中的作用 86 76. weblogic...

    php-restful-skeleton

    支持以接口输入输出为主的框架 ,同时输出除了支持接口格式的json xml string等等之外,还支持以mvc的输入-》处理-》模板回显的mvc风格 原生支持php模板引擎 基于composer 支持blade模板引擎 ##源码获取 git clone ...

Global site tag (gtag.js) - Google Analytics