Spring
什么是 Spring 框架?
Spring 是一个轻量级的 IOC 和 AOP 容器框架。是为 Java 应用程序提供基础性服务的一套框架,目标是用于简化企业应用程序的开发,它使得开发者只须要关怀业务需要。常见的配置形式有三种:基于 XML 的配置、基于注解的配置、基于 Java 的配置。
次要由以下几个模块组成:
- Spring Core:外围类库,提供 IOC 服务;
- Spring Context:提供框架式的 Bean 拜访形式,以及企业级性能(JNDI、定时工作等);
- Spring AOP:AOP 服务;
- Spring DAO:对 JDBC 的形象,简化了数据拜访异样的解决;
- Spring ORM:对现有的 ORM 框架的反对;
- Spring Web:提供了根本的面向 Web 的综合个性,例如多方文件上传;
- Spring MVC:提供面向 Web 利用的 Model-View-Controller 实现。
如何了解 Spring 的 AOP?
AOP 能够说是对 OOP 的补充和欠缺。OOP 引入封装、继承和多态性等概念来建设一种对象层次结构,用以模仿公共行为的一个汇合。当咱们须要为扩散的对象引入公共行为的时候,OOP 则显得无能为力。也就是说,OOP 容许你定义从上到下的关系,但并不适宜定义从左到右的关系。例如日志性能。日志代码往往程度地分布在所有对象档次中,而与它所分布到的对象的外围性能毫无关系。在 OOP 设计中,它导致了大量代码的反复,而不利于各个模块的重用。
AOP 是面向切面编程,将程序中的穿插业务逻辑(比方平安,日志,事务等),封装成一个切面,而后注入到指标对象(具体业务逻辑)中去。
AOP 的实现形式
织入:指代码切入到指标函数的过程,例如 aspectJ 到 java 程序的过程称为织入。
动态 AOP
在编译期,切面间接以字节码的模式编译到指标字节码文件中。
AspectJ 属于动态 AOP,是在编译时进行加强,会在编译的时候将 AOP 逻辑织入到代码中,须要专有的编译器和织入器。
动静 AOP
实现原理是为被代理的业务接口生成代理类,将 AOP 逻辑写入到代理类中,在运行时动静织入 AOP,应用反射执行织入的逻辑。
次要实现形式依赖 java.lang.reflect 包下的 InvocationHandler 和 Proxy 类。
- 长处:Java 规范库原生反对,应用简略,无需援用额定的包。绝对于动态 AOP 更灵便。
- 毛病:带代理的类必须是接口,灵活性受到一些限度;应用反射会影响一些性能。
动静代码字节生成
CGLib 是动静代码字节生成的实现,它封装字节码生成工具 Asm,原理是在运行期间指标字节码加载后,生成指标类的子类,将切面逻辑退出到子类中,所以应用 Cglib 实现 AOP 不须要基于接口。
- 长处:没有接口也能够织入,灵活性高。
- 毛病:扩大类的实例办法为 final 时,则无奈进行织入。
自定义类加载器
在运行前,指标加载前,将切面逻辑加到指标字节码中。
IOC
在传统的开发模式下,咱们都是采纳间接 new 一个对象的形式来创建对象,也就是说你依赖的对象间接由你本人管制,然而有了 IOC 容器后,则间接由 IoC 容器来管制。所以“谁管制谁”,当然是 IoC 容器管制对象。
MVC
MVC 指 MVC 模式的某种框架,它强制性的使应用程序的输出、解决和输入离开。应用 MVC 应用程序被分成三个核心部件:模型、视图、控制器。它们各自解决本人的工作.
Model(模型)用于解决应用程序数据逻辑的局部。通常模型对象负责在数据库中存取数据。
View(视图)解决数据显示的局部。通常视图是根据模型数据创立的。
Controller(控制器)解决用户交互的局部。通常控制器负责从视图读取数据,管制用户输出,并向模型发送数据。它使视图与模型分来到。
Spring MVC
Spring MVC 框架次要由 DispatcherServlet、处理器映射、控制器、视图解析器、视图组成.
Spring MVC 的工作流程如下:
- 客户端申请提交到 DispatcherServlet。
- 由 DispatcherServlet 控制器寻找一个或多个 HandlerMapping,找到解决申请的 Controller。
- DispatcherServlet 将申请提交到 Controller。
- Controller 调用业务逻辑解决后返回 ModelAndView 给 DispatcherServlet。
- DispatcherServlet 寻找一个或多个 ViewResolver 视图解析器,找到 ModelAndView 指定的视图。
- 视图负责将模型结果显示到客户端。
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 对象,从而将相应后果渲染给客户。
参考资料
- https://blog.csdn.net/qq_3433…
- https://www.cnblogs.com/stanl…