文章目录
- 前言
- 叙述
- 宝图
- spring是什么
- 四个关键策略
- IOC/DI
- AOP
- 总结
最近在和小伙伴们讨论spring的内容,今天小咸儿特来总结一波~
先来看看spring各个模块之间的关系
既然看到了spring的各个模块关系图,那么我们就先来介绍一下spring的两大模块。
spring是什么
Spring是一个开放源代码的设计层面框架,它解决的是业务逻辑层和其他各层的松耦合问题,因此它将面向接口的编程思想贯穿整个系统应用。Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson创建。简单来说,Spring是一个分层的JavaSE/EE full-stack(一栈式) 轻量级开源框架。
或者简单说来就是一切从bean开始。
四个关键策略
- 1、基于POJO的轻量级和最小侵入性编程;
- 2、通过依赖注入和面向接口松耦合;
- 3、基于切面和惯性进行声明式编程;
- 4、通过切面和模板减少样板式代码;
IOC/DI
IOC:控制反转,也就是说将需要实现的对象创建、依赖的代码交给spring去实现。
DI:去赋值,维护好对象与对象之间的关系。
- spring-beans和spring-core是核心模块,包含控制反转(Inversion of Control,IOC)和依赖注入(Dependency Injection,DI)。
- spring-context模块构架于核心模块之上,扩展了BeanFactory,为她添加了Bean生命周期控制、框架事件体系以及资源加载透明化
- spring-expression模块是统一表达式语言(EL)的扩展模块,可以查询、管理运行中的对象,同时也方便的可以调用对象方法、操作数组、集合等。
AOP
AOP采取横向抽取机制,取代了传统纵向继承体系重复性代码。Spring AOP使用纯java实现,不需要专门的编译过程和类加载器,在运行期通过代理方式向目标类织入增强代码。
纵向继承:
横向抽取:
实现原理:
- AOP底层采用代理机制进行实现。
- 接口 + 实现类:spring采用JDK的动态代理 Proxy。
- 实现类:spring采用cglib字节码增强。
由spring-aspects和spring-instrument和spring-aop三个模块组成。
- spring-aop是spring的另一个核心模块,是AOP主要的实现模块,以JVM的动态代理技术为基础,设计出了一系列的AOP横切实现,比如前置通知、返回通知、异常通知等。
- spring-aspects模块集成自AspectJ框架,主要是为spring AOP提供多种AOP实现方法。
- spring-instrument模块是基于Java SE中的“java.lang.instrument”进行设计的,应该算是AOP的一个支援模块,主要作用是JVM启动时,生成一个代理类。
有关更多spring的内容分享,还请见小咸儿的博客内容。
感谢您的阅读~~