用原生java实现Spring以及SpringMVC(一)

本文介绍了作者尝试不用Spring和SpringMVC框架,而是使用原生Java来实现相关功能的过程。详细讲解了SpringMVC基于Servlet的工作原理,包括DispatcherServlet的角色、Controller的管理以及视图解析。同时,概述了Spring的核心——IOC和AOP,并讨论了实现这些功能所需的准备工作,如Java反射和代理机制。最后,展示了如何创建DispatcherServlet、扫包机制以及如何通过注解实现请求转发。
摘要由CSDN通过智能技术生成

最近工作之余闲来无事,突发奇想,想着尝试下自己不用Spring以及SpringMVC框架,就用原生来实现相关功能,于是又温习了下spring相关的资料,最后终于捣鼓出来一个玩意,所以写点东西总结,废话不多说了,先看看他们的工作原理,这个之前我的博客里面也说过,再拿过来给大家看看。


SpringMVC

SpringMVC基于servlet原理实现,Spring提供了DispatcherServlet,这个类不仅负责实现请求转发, 还负责启动一个WebApplicationContext容器。
按照Spring一贯的IoC哲学,所有的Controller都是 JavaBean,并由IOC容器统一管理。
对于View,则采取了更灵活的处理方 式,Spring MVC允许使用不同的View实现,除了JSP外,还可以使用Velocity、Freemaker、XSLT等多种View技术。

  1. 客户端发出一个http请求给web服务器,web服务器对http请求进行解析,如果匹配DispatcherServlet的请求映射路径(在web.xml中指定),web容器将请求转交给DispatcherServlet.

  2. DipatcherServlet接收到这个请求之后将根据请求的信息(包括URL、Http方法、请求报文头和请求参数Cookie等)以及HandlerMapping的配置找到处理请求的处理器(Handler)。

  3. DispatcherServlet根据HandlerMapping找到对应的Handler,将处理权交给Handler(Handler将具体的处理进行封装),再由具体的HandlerAdapter对Handler进行具体的调用。

  4. Handler对数据处理完成以后将返回一个ModelAndView()对象给DispatcherServlet。

  5. Handler返回的ModelAndView()只是一个逻辑视图并不是一个正式的视图,DispatcherSevlet通过 ViewResolver将逻辑视图转化为真正的视图View。

  6. Dispatcher通过model解析出ModelAndView()中的参数进行解析最终展现出完整的view并返回给客户端。

Spring

Spring即一个AOP框架,也是一IOC容器。 内部最核心的就是IOC了,动态注入,让一个对象的创建不用new了,可以自动的生产,这其实就是利用java里的反射,反射其实就是在运行时动态的去创建、调用对象,Spring就是在运行时,跟xml Spring的配置文件来动态的创建对象,和调用对象里的方法的 。
Spring还有一个核心就是AOP这个就是面向切面编程,可以为某一类对象 进行监督和控制(也就是 在调用这类对象的具体方法的前后去调用你指定的 模块)从而达到对一个模块扩充的功能。这些都是通过 配置类达到的。

开始前的准备工作

了解了spring和springMVC的工作原理,我发现其实实现相关的功能也不是太难,首先你必须搞明白java的反射,代理机制,搞清楚这俩点就可以基本就可以搞定了。首先我们准备好环境,创建一个java项目,名字就叫myspring吧,准备好一些jar包,由于是原生的,不需要spring的jar了。
我准备的jar如下:

cglib-nodep-2.2.jar(实现无接口代理)
servlet-api.jar(这就不用说了吧)
dom4j-1.6.1.jar(解析xml)
commons系jar(主要用在jdbc方面)

首先创建Servlet

我们也创建一个DispatcherServlet,就按照spring的风格吧,我创建的类名:
com.myspringframework.web.servlet.DispatcherServlet,然后在web.xml里面配置好,配置信息如下:

    <servlet>
        <servlet-name>dispatcher</servlet-name>
        <servlet-class>com.myspringframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>
                classpath:applicationContext.xml
            </param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>dispatcher</servlet
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值