spring 源码分析_Spring源码分析、SpringMVC底层源码分析

学习主题:Spring源码分析、SpringMVC底层源码分析

Spring源码分析

Spring的运行流程是什么

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

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对象。

SpringMVC底层源码分析

SpringMVC运行原理

b71fe325984781b9f9124b526b0cc513.png

SpringMVC常用类和接口以及作用

DispatcherServlet主控制器

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

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

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

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

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

接口中的抽象方法:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值