Spring框架定义
Spring 是一个轻量级的Java 开发框架,Spring主要用来开发Java应用,Spring 的核心是控制反转(IOC)和面向切面编程(AOP)。
Spring框架作用
Spring是为了解决企业应用开发的复杂性而创建的,主要作用如下:
1)方便解耦
Spring的主要作用就是为代码解耦,降低代码间的耦合度。
Spring 提供了IOC控制反转,由容器管理对象,对象的依赖关系,现在由容器完成。
2)AOP 编程的支持
通过 Spring 提供的 AOP功能,方便进行面向切面的编程。
3)支持声明式事务处理
通过配置就可以完成对事务的管理,无需手动编程,让开发人员可以从繁杂的事务管理代码中解脱出来,从而提高开发效率和质量。
4)方便集成各种优秀框架
Spring 不排斥各种优秀的开源框架,相反 Spring 可以降低各种框架的使用难度,Spring 提供了对各种优秀框架,比如:Struts、Hibernate、MyBatis、SpringBoot等的直接支持。
Spring 像插线板一样,其他框架是插头,可以容易的组合到一起,需要使用哪个框架,就把这个插头放入插线板,不需要可以轻易的移除。
Spring框架模块
Spring有七大功能模块,分别是Spring Core,AOP,ORM,DAO,MVC,WEB,Context。
1.Spring Core核心容器
Spring的核心容器是其他模块建立的基础,有Spring-core、Spring-beans、Spring-context、Spring-context-support和Spring-expression(String表达式语言)等模块组成。
核心容器提供了框架的基本组成部分,包括控制反转(Inversion of Control,IOC)和依赖注入(Dependency Injection,DI)等功能。
2.AOP面向切面编程
Spring-aop模块:提供了一个符合AOP要求的面向切面的编程实现,允许定义方法拦截器和切入点,将代码按照功能进行分离,以便干净地解耦。
Spring-aspects模块:提供了与AspectJ的集成功能,AspectJ是一个功能强大且成熟的AOP框架。
3.Spring Context模块
Spring上下文是一个配置文件,向spring提供上下文信息,spring上下文包括企业服务。
4. Spring Web模块
Web层由Spring-web、Spring-webmvc、Spring-websocket和Portlet模块组成。
5.Spring DAO模块
提供了一个JDBC的抽象层和异常层次结构,消除了烦琐的JDBC编码和数据库厂商特有的错误代码解析, 用于简化JDBC。
6.Spring ORM模块
Spring插入了若干个ORM框架,提供了ORM对象的关系工具,其中包括Hibernate,JDO和IBatisSQL Map等,所有这些都遵从Spring的通用事务和DAO异常层次结构。
7.Spring MVC模块
Sping MVC框架是一个全功能的构建Web应用程序的MVC实现。
Spring MVC 的工作流程,如下图所示:
Spring框架核心原理
1.IOC
IOC是Inversion of Control的缩写,多数书籍翻译成“控制反转”。
IOC不是一种技术,只是一种思想,一个重要的面向对象编程的法则,它能指导我们如何设计出松耦合、更优良的程序。
传统应用程序都是由我们在类内部主动创建依赖对象,从而导致类与类之间高耦合,难于测试,有了IoC容器后,把创建和查找依赖对象的控制权交给了容器,如下图所示:
上图引入了IOC容器,使得A、B、C、D这4个对象没有了耦合关系,齿轮之间的传动全部依靠“第三方”了,全部对象的控制权全部上缴给“第三方”IOC容器。
所以,IOC借助于“第三方”实现具有依赖关系的对象之间的解耦,使程序更优良。
IOC容器其实就是一个大工厂,它用来管理我们所有的对象以及依赖关系。
- 原理就是通过 Java 的反射技术来实现的,通过反射我们可以获取类的所有信息(成员变量、类名等等等);
- 再通过配置文件(xml)或者注解来描述类与类之间的关系。
这样我们就可以通过这些配置信息和反射技术来构建出对应的对象和依赖关系了,如下图所示:
2.AOP
AOP(Aspect Orient Programming),直译过来就是 面向切面编程,AOP是一种编程思想,是面向对象编程(OOP)的一种补充。
面向切面编程,实现在不修改源代码的情况下给程序动态统一添加额外功能的一种技术,如下图所示:
Spring的AOP实现原理其实很简单,就是通过动态代理实现的。
Spring AOP 采用了两种混合的实现方式:JDK 动态代理和 CGLib 动态代理。
SpringAOP的典型应用场景,如下图所示:
mikechen睿哥
mikechen睿哥,十余年BAT架构经验,资深技术专家,就职于阿里、淘宝、百度等一线互联网大厂。
关注「mikechen」公众号,获取更多技术干货!
后台回复【面试】即可获取《史上最全阿里Java面试题总结》,后台回复【架构】,即可获取《阿里架构师进阶专题全部合集》