码迷,mamicode.com
首页 > 编程语言 > 详细

springbank 开发日志 阅读spring mvc的源代码真是受益良多

时间:2017-07-12 13:41:18      阅读:289      评论:0      收藏:0      [点我收藏+]

标签:over   如何   抽象   patch   ota   pat   efault   ica   init   

决定模仿spring mvc的dispatcher->handlerMapping(return executorChain)->handler.execute 这样的流程之后,就开始看spring mvc的源代码。

因为我也自定义了标签,来做交易名映射,根据交易名找到处理类。所以我着重需要看的,就是spring mvc是如何根据url找到对应的handler的。

既然要找,首先要有个找的地方,spring mvc是这样做的,它搞了AbstractDetectingUrlHandlerMapping类,这个类的继承体系如下,其中ApplicationObjectSupport这个抽象父类是实现了ApplicationContextAware的,也就是说Spring一旦启动完成,就会去调用它的setApplicationContext方法,然后这里面又搞了一个抽象的initApplicationContext()方法,

 

AbstractDetectingUrlHandlerMapping实现了initApplicationContext这个方法:

  @Override
    public void initApplicationContext() throws ApplicationContextException {
        super.initApplicationContext();
        detectHandlers();
    }

然后这里的determineUrlsForHandler(String beanName);又是一个抽象方法,这个方法在下面这张图最下面的两个子类中得到了实现。

实际上取得了怎样的效果呢?效果就是BeanNameUrlHandlerMapping和DefaultAnnotationHandlerMapping这两个类都间接继承了initApplicationContext方法,并且都会调用各自的detectHandlers()去查找注册handler,真是很好的设计,感叹啊

技术分享

 

springbank 开发日志 阅读spring mvc的源代码真是受益良多

标签:over   如何   抽象   patch   ota   pat   efault   ica   init   

原文地址:http://www.cnblogs.com/heben/p/7154718.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!