我们可以从来两个角度去认识Spring,从技术的角度看,Spring是一个 IoC(控制反转)和 AOP(面向切面编程)的 容器;从用途的角度看Spring是一个解决企业级应用开发的 复杂性问题而诞生的 框架。
何为框架
对框架最简单的描述就是:框架是一个半成品软件。
我们在开发不同软件的过程中,会遇到一些重复的、基础的代码。例如:要编写出一个导航栏,需要使用Html定义一些按钮,图标,再用Css将这些元素进行合理的布局。如果要将这个导航栏美化,就需要更多的Css代码。每次创建导航栏都是用这些代码,那为何不将这些代码的重复部分进行封装呢?对于实现一个完整的功能,有很多地方可能都有这样经常重复的代码,将大部分这些地方能够封装的重复性代码进行封装,就组成了框架。
而在企业级应用的开发中,为了让软件兼容性好,经常需要遵循一些特定的规范,这些特定规范的存在就导致了一些重复、基础的代码的存在,将这些特定的规范实现并封装,也就成了企业级应用的框架。如:Java EE就是一个很常见的规范。
说到这里,在Java SE中我们经常使用很多类库,这些类库其实也封装了很多方法和属性,它们和框架的区别就是:类库是松散的,每一个类库都能实现一个特定的功能(与庞大的业务相比,这些功能很小),类库更像是一堆松散的工具。而框架是高内聚的,框架专注于某一个领域,它在该领域已经实现的功能远比单纯的类库多。
开发者和框架结合,最终就完成了一个成品软件。
Spring是一个什么框架?
如图所示,Spring框架可以分为7个模块:
- 核心容器(Core Container):
提供DI(依赖注入)的特征,该模块中有BeanFactory,是所有Spring应用的核心。BeanFactory使Spring成为一个容器。 - 应用上下文模块(Context):
扩展了BeanFactory,使Spring成为一个框架。 - AOP模块:
提供了对AOP的支持。 - DAO模块:
简化了JDBC,在数据库服务器的错误消息上提供了异常层,并为Spring的对象提供了事务管理。 - ORM(对象/关系映射)模块:
为几种流行的ORM框架提供了集成方法。 - MVC模块:
为Web应用提供了使用IoC的,分离了控制逻辑和业务对象的MVC框架。 - Web模块:
提供适合于Web应用的上下文,也提供了与其他Web框架的集成方法。
看完上面这些肯定还是一头雾水,要对上面的内容有清晰的认识得学完所有Spring的知识,这篇文章就先从IoC说起。
何为IoC?
IoC的全称为控制反转,有反转肯定就有正转,什么是正转呢?
我们之前编程时,当需要在A类中用到B类的属性或方法时,通常是在A类中创建一个B类的对象,或者让A类继承B类。这样两个类之间的依赖关系是由A主动去维护的,这就是正转。这样当类越来越多时,它们的依赖关系也就越来越复杂。
比如这样的:
虽然理清它们不难,但还是很繁琐。
而引入了IoC,就是将维护类之间的依赖关系的过程交给IoC容器去处理,当A类需要B类的属性或方法时,由IoC容器将这些属性和方法注入进A类,即A类获得依赖对象的过程反转了(不再由自己主动获取了,而是被动接受)。至于这是如何实现的又是后话了,Spring就是这样一个IoC容器。