Spring | 面试题整理

Spring

什么是 Spring 框架?

Spring 是一个轻量级的 IOC 和 AOP 容器框架。是为 Java 应用程序提供基础性服务的一套框架,目的是用于简化企业应用程序的开发,它使得开发者只须要关心业务需求。常见的配置方式有三种:基于 XML 的配置、基于注解的配置、基于 Java 的配置。html

主要由如下几个模块组成:前端

  1. Spring Core:核心类库,提供 IOC 服务;
  2. Spring Context:提供框架式的 Bean 访问方式,以及企业级功能(JNDI、定时任务等);
  3. Spring AOP:AOP 服务;
  4. Spring DAO:对 JDBC 的抽象,简化了数据访问异常的处理;
  5. Spring ORM:对现有的 ORM 框架的支持;
  6. Spring Web:提供了基本的面向 Web 的综合特性,例如多方文件上传;
  7. Spring MVC:提供面向 Web 应用的 Model-View-Controller 实现。

如何理解 Spring 的 AOP?

AOP 能够说是对OOP的补充和完善。OOP 引入封装、继承和多态性等概念来创建一种对象层次结构,用以模拟公共行为的一个集合。当咱们须要为分散的对象引入公共行为的时候,OOP 则显得无能为力。也就是说,OOP 容许你定义从上到下的关系,但并不适合定义从左到右的关系。例如日志功能。日志代码每每水平地散布在全部对象层次中,而与它所散布到的对象的核心功能毫无关系。在 OOP 设计中,它致使了大量代码的重复,而不利于各个模块的重用。
AOP 是面向切面编程, 将程序中的交叉业务逻辑(好比安全,日志,事务等),封装成一个切面,而后注入到目标对象(具体业务逻辑)中去。java

AOP 的实现方式

织入:指代码切入到目标函数的过程,例如 aspectJ 到 java 程序的过程称为织入。数据库

静态AOP

在编译期,切面直接以字节码的形式编译到目标字节码文件中。
AspectJ 属于静态 AOP,是在编译时进行加强,会在编译的时候将 AOP 逻辑织入到代码中,须要专有的编译器和织入器。编程

动态AOP

实现原理是为被代理的业务接口生成代理类,将AOP逻辑写入到代理类中,在运行时动态织入AOP,使用反射执行织入的逻辑。 
主要实现方式依赖 java.lang.reflect 包下的 InvocationHandler 和 Proxy 类。安全

  • 优势:Java 标准库原生支持,使用简单,无需引用额外的包。相对于静态 AOP 更灵活。
  • 缺点:带代理的类必须是接口,灵活性受到一些限制;使用反射会影响一些性能。

动态代码字节生成

CGLib 是动态代码字节生成的实现,它封装字节码生成工具 Asm,原理是在运行期间目标字节码加载后,生成目标类的子类,将切面逻辑加入到子类中,因此使用 Cglib 实现 AOP 不须要基于接口。微信

  • 优势:没有接口也能够织入,灵活性高。
  • 缺点:扩展类的实例方法为 final 时,则没法进行织入。

自定义类加载器

在运行前,目标加载前,将切面逻辑加到目标字节码中。app

IOC

在传统的开发模式下,咱们都是采用直接 new 一个对象的方式来建立对象,也就是说你依赖的对象直接由你本身控制,可是有了 IOC 容器后,则直接由 IoC 容器来控制。因此“谁控制谁”,固然是 IoC 容器控制对象。框架

MVC

image.png

MVC指MVC模式的某种框架,它强制性的使应用程序的输入、处理和输出分开。使用MVC应用程序被分红三个核心部件:模型、视图、控制器。它们各自处理本身的任务.函数

Model(模型)用于处理应用程序数据逻辑的部分。一般模型对象负责在数据库中存取数据。

View(视图)处理数据显示的部分。一般视图是依据模型数据建立的。

Controller(控制器)处理用户交互的部分。一般控制器负责从视图读取数据,控制用户输入,并向模型发送数据。它使视图与模型分离开。

Spring MVC

Spring MVC 框架主要由 DispatcherServlet、处理器映射、控制器、视图解析器、视图组成.
微信图片_20200918211314.jpg

Spring MVC 的工做流程以下:

  1. 客户端请求提交到 DispatcherServlet。
  2. 由 DispatcherServlet 控制器寻找一个或多个 HandlerMapping,找处处理请求的 Controller。
  3. DispatcherServlet 将请求提交到 Controller。
  4. Controller 调用业务逻辑处理后返回 ModelAndView 给 DispatcherServlet。
  5. DispatcherServlet 寻找一个或多个 ViewResolver 视图解析器,找到 ModelAndView 指定的视图。
  6. 视图负责将模型结果显示到客户端。

Spring MVC接口

在图 1 中包含 4 个 Spring MVC 接口,即 DispatcherServlet(前端控制器)、HandlerMapping、Controller 和 ViewResolver(视图解析器)。

DispatcherServlet: Spring MVC 全部的请求都通过 DispatcherServlet 来统一分发,在 DispatcherServlet 将请求分发给 Controller 以前须要借助 Spring MVC 提供的 HandlerMapping 定位到具体的 Controller。

HandlerMapping: 接口负责完成客户请求到 Controller 映射。

Controller :处理用户请求。一旦 Controller 处理完用户请求,将返回 ModelAndView 对象给 DispatcherServlet 前端控制器,ModelAndView 中包含了模型(Model)和视图(View)。表示模型应该映射到哪一个视图上,但传递的视图名并不直接表示某个特定的JSP,仅仅传递了一个逻辑名称,这个名字将用来查找产生结果的真正视图。DisPatcherServlet将会使用视图解析器来将逻辑视图名匹配微一个特定的视图实现。

从宏观角度考虑,DispatcherServlet 是整个 Web 应用的控制器;从微观考虑,Controller 是单个 Http 请求处理过程当中的控制器,而 ModelAndView 是 Http 请求过程当中返回的模型(Model)和视图(View)。

ViewResolver(视图解析器):在 Web 应用中负责查找 View 对象,从而将相应结果渲染给客户。

参考资料

  1. https://blog.csdn.net/qq_3433...
  2. https://www.cnblogs.com/stanl...
相关文章
相关标签/搜索