浏览 7524 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2010-12-30
最后修改:2011-02-18
《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; } } 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2010-12-30
过分追求0配置,会影响代码复用的
|
|
返回顶楼 | |
发表时间:2010-12-30
gtssgtss 写道 过分追求0配置,会影响代码复用的
+1 |
|
返回顶楼 | |
发表时间:2010-12-31
gtssgtss 写道 过分追求0配置,会影响代码复用的
可不可以举个例说说看! |
|
返回顶楼 | |
发表时间: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没说他改了以后是可配置还是不可配置,我当是不可配置了 |
|
返回顶楼 | |
发表时间: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!这样比较灵活!遵守规则,就可以少写代码,不遵守也行! |
|
返回顶楼 | |
发表时间:2010-12-31
http://code.google.com/p/paoding-rose/
|
|
返回顶楼 | |
发表时间:2011-01-30
org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping
搞定一切 |
|
返回顶楼 | |
发表时间:2011-05-23
tiyi 写道 org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping
搞定一切 使用这个达不到我想要的0配置效果,每个方法仍然要加上RequestMapping的注解。里面的url倒可以不写了。 |
|
返回顶楼 | |