SpringMVC

作者: 一直想上树的猪 | 来源:发表于2020-06-09 14:04 被阅读0次

    一、Spring IOC容器原理

    ioc容器是什么

    Map iocMap = new HashMap();
    OrderService orderService = new OrderService();
    iocMap.put("orderService", orderService);
    

    ioc容器是一个很大的map对象,是单例的,只有一个map,map中放了很多java的bean对象

    ioc容器如何使用?

        @Autowired
        private OrderService orderService;
        // 直接从iocMap.get("orderService")
    

    二、Tomcat

    Tomcat启动时加载Springmvc的流程

    image.png
    • 开发好的jar包放到tomcat指定的目录下,当启动tomcat的时候会去加载war包,加载里面的class文件。
    • 在加载的时候会去找一个包下面的所有的文件(basePackage="com.tinner.*")扫描com.tinner包下有哪些类声明了特殊的注解(@Cotroller、@Service、@Autowared)找到这些特殊的类
    • 然后将这些类进行实例化,Spring创建对象是通过反射的方式进行实例化的。
    • 将这些实例化的bean进行存储,存储到一个map中去
    • 当使用@Autowared的时候,通过map的get方法去获取对应的bean
    • 当浏览器输入一个url,如何通过对应的url找到对应的处理方法?(handlermapping),当tomcat在加载控制类的时候,类上面是有路径的,包括方法上面的也是有路径的,当实例化bean的时候, 会将类上的路径和方法上的路径拿出来进行拼接,然后绑定成一个键值对,这样就可以对一个方法进行对应的url的映射,这些很多的方法很多的路径集合成为一个handlermapping

    Tomcat启动成功之后

    • 进入doGet()/doPost()方法,然后根据url的映射关系去找到对应的处理该请求的方法
    • 执行method

    核心:DispatcherServlet

    三、手写Springmvc

    springmvc.png

    1、自定义注解

    • 自定义Controller注解
    @Target({ElementType.TYPE})
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    public @interface Controller {
        String value() default "";
    }
    
    • 自定义RequestMapping注解
    @Target({ElementType.METHOD, ElementType.TYPE})
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    public @interface RequestMapping {
        String value() default "";
    }
    
    • 自定义Autowired注解
    @Target({ElementType.CONSTRUCTOR, ElementType.METHOD, ElementType.PARAMETER, ElementType.FIELD, ElementType.ANNOTATION_TYPE})
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    public @interface Autowired {
        boolean required() default true;
    }
    
    • 自定义RequestParam注解
    @Target(ElementType.PARAMETER)
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    public @interface RequestParam {
        String value() default "";
    }
    

    2、自定义DispatcherServlet,继承HttpServlet

    里面有连个成员变量(map)

    • 一个map是用来存放那些被声明了自定义Controller和自定义service的注解的类的实例bean
    • 另一个map是用来存放请求路径和对应处理方法的绑定关系的相关信息
      在init方法中:
    • 扫描路径
    • 实例化对应的bean,存储到map中
    • autowared处理
    • url路径和方法绑定到handlermapping中

    3、处理请求

    处理请求时,根据路由,从handlermapping中找到对应的方法,进行处理,然后返回对应的结果

    相关文章

      网友评论

          本文标题:SpringMVC

          本文链接:https://www.haomeiwen.com/subject/vmbrtktx.html