.Net 视图加载 在 ActionResult之后调用视图类的Render展示视图。而无独有偶,Spring MVC在 Dispatcher DoDispath 最后也是调用Render加载视图,看来.Net 与Java极具雷同。
在Spring MVC接管Tomcat的HTPP消息时候,传递三个Servlet(DefaultServlet,JspServlet,DispatcherServlet).Default 是在第一次请求JSP页面的时候加载,他加载和编译了JSP 文件为Servlet类型,JSPServlet 则是在第一次加载JSP页面之后的请求,DispatcherServlet 是在请求类的时候加载的。类似于<bean name="/hello" class="com.bing.first.abc"></bean>这种形式的加载。
在整个 Servlet生命周期阶段,Init负责加载 Web.XML,ApplicationContext.XML 等。初始化BeanFactory 类工厂以待后面使用。Service则是负责转接 上面Tomcat发送过来的三个Servlet分别实现。
Spring MVC通过 BeanFactory来初始化XML 文件,首先是通过 CreateBeanFactory创建一个Bean工厂类,然后XMLBean构造函数传入创建的Bean工厂类,调用LoadDefinetions 判断当前XML文件的位置。通过工厂类和Path来创造XML Document文档。最后逐一读出XML文件的Bean,Property等属性。
Asp.Net MVC 则通过IhttpModule,IHTTPhandle管道模型来启动整个MVC加载,ControllerBulider工厂类初始化Controller(反射过程,然后使用缓存,减少反射增加的性能消耗),通过MethodInfo 获取到当前Controller的方法,然后进行调用。
Java 里面继承关键字,implments,extends,增加这两关键字明显的减少了可读性,C#直接继承,不需要关键字可读性更强。String ,和System的S必须大写否则出错,C#则大小写皆可都有实现类以及方法,自由灵活度更高一些。
Spring MVC 控制器的激活,return ((Controller) handler).handleRequest(request, response);直接调用子类被Overrider的 方法
.Net MVC控制器激活通过ControllerBuilder类工厂进行激活,然后区分有指向性的同步和异步,在类工厂引入了反转控制。
Spring Action调用也没什么特别突出,直接上面一句话搞定,.Net MVC Action 调用,是通过反射的Controller类获取到里面的Public方法,根据视图名称来调用相应的方法。
Spring里面大量用到依赖注入,XML这种传输速度快,体积小的文件。.Net MVC 里面大量用到反射,反转控制类工厂等特性
.Net MVC 结构清晰,代码精炼凝练,用聚合函数Aggregate函数构造的筛选器递归链表,秒杀Java代码。用到的反射缓存技术,在Spring里面没有看到。SpringMVC 代码混乱,结构稍显拖拉。Escplise稍不小心,各种错误,Tomcat Debug下面会自动死机。作为微软一体化的 Visual Studio 和IIS从来不会出现这种情况。至于Escplise和Visual Studio根本不在一个档次,不具备可比性。
Spring MVC 的好处在于配合开源的Tomcat和JDK,随时可以做一个自己喜欢的版本和去掉重复的用不到的代码。.Net MVC目前尚且不能脱离IIS,不过结构貌似完爆Spring.