Spring 是一个轻量级的 IOC 和 AOP 容器框架。是为 Java 应用程序提供基础性服务的一套框架,目的是用于简化企业应用程序的开发,它使得开发者只须要关心业务需求。常见的配置方式有三种:基于 XML 的配置、基于注解的配置、基于 Java 的配置。html
主要由如下几个模块组成:前端
AOP 能够说是对OOP的补充和完善。OOP 引入封装、继承和多态性等概念来创建一种对象层次结构,用以模拟公共行为的一个集合。当咱们须要为分散的对象引入公共行为的时候,OOP 则显得无能为力。也就是说,OOP 容许你定义从上到下的关系,但并不适合定义从左到右的关系。例如日志功能。日志代码每每水平地散布在全部对象层次中,而与它所散布到的对象的核心功能毫无关系。在 OOP 设计中,它致使了大量代码的重复,而不利于各个模块的重用。
AOP 是面向切面编程, 将程序中的交叉业务逻辑(好比安全,日志,事务等),封装成一个切面,而后注入到目标对象(具体业务逻辑)中去。java
织入:指代码切入到目标函数的过程,例如 aspectJ 到 java 程序的过程称为织入。数据库
在编译期,切面直接以字节码的形式编译到目标字节码文件中。
AspectJ 属于静态 AOP,是在编译时进行加强,会在编译的时候将 AOP 逻辑织入到代码中,须要专有的编译器和织入器。编程
实现原理是为被代理的业务接口生成代理类,将AOP逻辑写入到代理类中,在运行时动态织入AOP,使用反射执行织入的逻辑。
主要实现方式依赖 java.lang.reflect 包下的 InvocationHandler 和 Proxy 类。安全
CGLib 是动态代码字节生成的实现,它封装字节码生成工具 Asm,原理是在运行期间目标字节码加载后,生成目标类的子类,将切面逻辑加入到子类中,因此使用 Cglib 实现 AOP 不须要基于接口。微信
在运行前,目标加载前,将切面逻辑加到目标字节码中。app
在传统的开发模式下,咱们都是采用直接 new 一个对象的方式来建立对象,也就是说你依赖的对象直接由你本身控制,可是有了 IOC 容器后,则直接由 IoC 容器来控制。因此“谁控制谁”,固然是 IoC 容器控制对象。框架
MVC指MVC模式的某种框架,它强制性的使应用程序的输入、处理和输出分开。使用MVC应用程序被分红三个核心部件:模型、视图、控制器。它们各自处理本身的任务.函数
Model(模型)用于处理应用程序数据逻辑的部分。一般模型对象负责在数据库中存取数据。
View(视图)处理数据显示的部分。一般视图是依据模型数据建立的。
Controller(控制器)处理用户交互的部分。一般控制器负责从视图读取数据,控制用户输入,并向模型发送数据。它使视图与模型分离开。
Spring MVC 框架主要由 DispatcherServlet、处理器映射、控制器、视图解析器、视图组成.
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 对象,从而将相应结果渲染给客户。