训练大纲(第106天)

大家如果想快速有效的学习,思想核心是“以建立知识体系为核心”,具体方法是“守破离”。确保老师课堂上做的操作,反复练习直到熟练。

第211次(源码分析)

学习主题:源码分析

学习目标:

对应视频:

http://www.itbaizhan.cn/course/id/85.html

对应文档:

对应作业

  1. Spring的运行流程是什么

Spring启动时读取应用程序提供的Bean配置信息,并在Spring容器中生成一份相应的Bean配置注册表,然后根据这张注册表实例化Bean,装配好Bean之间的依赖关系,为上层应用提供准备就绪的运行环境。

  1. 写出Spring重要的类和接口以及作用

ApplicationContext: ApplicationContext内部封装了一个BeanFactory对象,来实现对容器的操作, BeanFactory 封装了 bean 的信息,而 ApplicationContext 通过访问 BeanFactory 对象获取 bean 的对象信息 ApplicationContext 也实现了一系列的 BeanFactory 接口(可以说 ApplicationContext 对 BeanFactory 对象实现一种代理)。

ClassPathXmlApplicationContext:

refresh:初始化IOC容器

DefaultListableBeanFactory:在 BeanFactory 子类中有一个 DefaultListableBeanFactory 类,它包含了基本 Spirng IoC 容器所具有的重要功能,开发时不论是使用 BeanFactory 系列还是 ApplicationContext 系列来 创建容器基本都会使用到 DefaultListableBeanFactory 类,可以这么说,在 spring 中实际上把 它当成默认的 IoC 容器来使用

XmlBeanDefinitionReader:解析xml配置文件

beanDefinitionMap:将BeanDefinition注册到容器中

preInstantiateSingletons:实例化Bean对象

getObjectForBeanInstance:获取Bean对象。

分享/讲解/扩展思考

点名提问从第一节课到最后一节课分别学到了什么,直到同学们把所有的知识点都说出来并且保证无误。

第212次(源码分析)

学习主题:源码分析

学习目标:

对应视频:

http://www.itbaizhan.cn/course/id/85.html

对应文档:

对应作业

  1. SpringMVC底层源码分析
  1. 写出SpringMVC运行原理




spring statemachine 的优缺点_源码分析


  1. 写出SpringMVC常用类和接口以及作用

1.DispatcherServlet主控制器

1.1HttpServletBean:HttpServletBean 覆写了 init 方法,主要做一些初始化的工作,将 web.xml 中配置的参数 设置到 Servlet 中。比如 servlet 标签的子标签 init-param 标签中配置的参数

1.2FrameworkServlet:将 Servlet 上下文与 Spring 容器上下文关联。其实也就是初始化 FrameworkServlet 的属 性 webApplicationContext , 这 个 属 性 代 表 SpringMVC 上 下 文 对 象 , 实 际 类 型 ConfigurableWebApplicationContext。如果项目中用到spring了那么它有个父容器,既web.xml 中配置的 ContextLoaderListener 监听器初始化的容器上下文

2.HandlerMapping接口:作用是根据当前请求的找到对应的 Handler(HandlerMethod(Controller 中的方法)、 Controller 对 象 ) , 并 将 Handler 与 一 堆 HandlerInterceptor ( 拦 截 器 ) 封 装 到 HandlerExecutionChain 对象中。在 HandlerMapping 接口的内部只有一个方法: HandlerExecutionChaingetHandler(HttpServletRequestrequest);

2.1HandlerMapping 接口实现类 :HandlerMapping 实现类有两个分支,分别继承自 AbstractHandlerMethodMapping(得 到 HandlerMethod)和 AbstractUrlHandlerMapping(得到 Controllert),它们又统一继承于 AbstractHandlerMapping。

3.HandlerAdapter 接口:SpringMVC 中使用适配器模式来解决不同的 Handler 的执行。根据 Handler 来找到支 持它的 HandlerAdapter,通过 HandlerAdapter 执行这个 Handler 得到 ModelAndView 对 象。

3.1接口中的抽象方法:

booleansupports(Objecthandler); 判断是否支持传入的 Handler ModelAndView

handle(HttpServletRequest request, HttpServletResponse response, Object handler) 用来使用 Handler 处理请求

long getLastModified(HttpServletRequest request, Object handler); 用 来 获 取 资 料 的 Last-Modified 值

3.2AbstractHandlerMethodAdapter 抽象类:利用 RequestMappingHandlerMapping 获取的 Handler 是 HadnlerMethod 类型,它代 表 Controller 里要执行的方法。handlerInternal 是子类 RequestMappingHandlerAdapter 中的 方法。

3.3RequestMappingHandlerAdapter 类:RequestMappingHandlerAdapter 实际就是执行@RequestMapping 注解的方法

3.4HttpRequestHandlerAdapter 类:HttpRequestHandlerAdapter 。 是 HttpRequestHandler 的 适 配 器 可 以 执 行 HttpRequestHandler 类型的 Handler。其实就是 Controller 中的 handleRequest 方法

3.5SimpleControllerHandlerAdapter 类:SimpleControllerHandlerAdapter 是 Controller 实现类的适配器类,其本质也是执行 Controller 中的 handleRequest 方法。

3.6SimpleServletHandlerAdapter 类:SimpleServletHandlerAdapter 其实是一个 Servlet 的适配器,其最终执行的方法是 Servlet 的 service 方法

4.ViewResolver 接口:根据视图的名称将其解析为 View 类型的视图,如通过 ModelAndView 中的视图名称 将其解析成 View,View 是用来渲染页面的,也就是将 Model 填入模板中,生成 html 或 其他格式的文件。

4.1AbstractCachingViewResolver 抽象类:AbstractCachingViewResolver 是带有缓存的 ViewResolver,它每次解析时先从缓存里查 找,如果找到视图就返回,没有就创建新的视图,且创建新视图的方法由其子类实现。

4.2ResourceBundleViewResolver 类:ResourceBundleViewResolver 根据 views.properties 文件来解析视图,这个文件应位于 classpath 路径下

4.3XmlViewResolver 类:XmlViewResolver 根据 xml 文件来解析视图

4.4UrlBasedViewResolver 类:UrlBasedViewResolver 提供了拼接 URL 的方式来解析视图,通过 prefix 属性拼接一 个前缀,通过 suffix 属性拼接一个后缀,就得到了视图的 URL。还可以加入 redirect: 与 forword: 前缀,使用 redirect: 前缀会调用 HttpServletResponse 对象的 sendRedirect() 方法 进行重定向,使用 forword: 前缀会利用 RequestDispatcher 的 forword 方式跳转到指定的地 址。另外,使用时还要指定 viewClass 属性,表示要解析成哪种 View。

4.5InternalResourceViewResolver 类:InternalResourceViewResolver 是 UrlBasedViewResolver 的 子 类 , 将 InternalResourceView 作为默认的 View 类,但如果当前 classpath 中有 jstl 的 jar 包时则 使用 JstlView 作为 view 来渲染。

5.View接口:视图渲染器,在该接口中定义了渲染视图的抽象方法。 何为渲染:所谓渲染其实就是将 Model 中的数据放到 HttpServletRequest 中传递 jsp。 void render(Map<String, ?> model, HttpServletRequest request, HttpServletResponse response)throwsException;

5.1InternalResourceView 类:继承自 AbstractUrlBasedView 抽象类的类,表示 JSP 视图

分享/讲解/扩展思考

点名提问从第一节课到最后一节课分别学到了什么,直到同学们把所有的知识点都说出来并且保证无误。