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