手写springmvc

https://my.oschina.net/liughDevelop/blog/1622646

https://www.jianshu.com/p/f454662f497e

 

1  扫描基包全部所有带有基本全限定名

class.getclasslocad(packeurl);

遍历file 如果是目录继续递归 是文件 就把   D:aa/bb/cc  下面的变成 aa.bb.cc.userImpl全限定名 最后放入  list<String>  packageName 中

2  ioc实列化  生成map

再遍历packageName   根据全限定名  生成 class c 对象 根据反射 找到对应@controller@service    最后用个map装  (aa.bb.cc.userImpl 和生成的对象)  依赖DI也是类似原理

3  建立URL和处理器的关系

再建立url和hander对应关系    map中后再用  循环找到 全限定名字 找到class对象  class对象上面有controller注解 获取注解后面 那个值  urlmap.add(/aa)   获取@requestMapping后面的值  urlmap.add(/bb)   最后存放map (baserul(aa/bb) , method(就是hander) )

还有一个map (method,全限定名的)

4在doget  dopost中处理数据

根据URL找到处理method  再根据method 找到全限定名   再找已经实例化对象。 再用方法反射 method.invoke(UserController)   这样就完成了。

 

处理器适配器

http://blog.csdn.net/wangbiao007/article/details/50547020

http://blog.csdn.net/bu123dian/article/details/52778870

http://blog.csdn.net/csdn_gia/article/details/54970865

适配器模式就是根据controller找到合适的处理方式  比如 返回modelAndView  还是直接返回 

  1. request.setAttribute("message", "我是中国人");  
  2. request.getRequestDispatcher("/WEB-INF/jsps/mess.jsp").forward(request, response);            

 

posted on 2018-03-15 17:12  woymy  阅读(129)  评论(0)    收藏  举报

导航