本章主要介绍Spring中的体系结构和常见概念,比如bean、控制反转(Inverse of Control,IoC)等。
Spring 框架提供约 20 个模块,可以根据应用程序的要求来使用。
核心容器由核心,Bean,上下文和表达式语言模块组成,它们的细节如下:
核心模块提供了框架的基本组成部分,包括 IoC 和依赖注入功能。
Bean模块提供 BeanFactory,它是一个工厂模式的复杂实现。
上下文模块建立在由核心和 Bean 模块提供的坚实基础上,它是访问定义和配置的任何对象的媒介。ApplicationContext 接口是上下文模块的重点。
表达式语言模块在运行时提供了查询和操作一个对象图的强大的表达式语言。
数据访问/集成层包括 JDBC,ORM,OXM,JMS 和事务处理模块,它们的细节如下:
JDBC 模块提供了删除冗余的 JDBC 相关编码的 JDBC 抽象层。
ORM 模块为流行的对象关系映射 API,包括 JPA,JDO,Hibernate 和 iBatis,提供了集成层。
OXM 模块提供了抽象层,它支持对 JAXB,Castor,XMLBeans,JiBX 和 XStream 的对象/XML 映射实现。
Java 消息服务 JMS 模块包含生产和消费的信息的功能。
事务模块为实现特殊接口的类及所有的 POJO 支持编程式和声明式事务管理。
Web 层由 Web,Web-MVC,Web-Socket 和 Web-Portlet 组成,它们的细节如下:
还有其他一些重要的模块,像 AOP,Aspects,Instrumentation,Web 和测试模块,它们的细节如下:
Spring对Bean的官方定义如下:
在 Spring 中, 构成应用程序主干 并由 Spring IoC容器 管理的 对象 称为bean。 bean是一个由Spring IoC容器实例化、组装和管理的对象。
由上面的定义可以得到如下3点信息:
控制反转英文全称:Inversion of Control,简称就是IoC,这是管理Java实例协作关系的一种方式。这种方式还有另一个名称, 依赖注入(Dependency Injection) ,两者的含义相同。
传统方式下,当某个Java对象(调用者)需要调用另一个Java对象(被依赖对象)的方法时,通常有如下两种做法:
注意上面的 主动 二字,这必然会导致调用者与被依赖对象实现类的硬编码耦合,非常不利于项目升级的维护。
使用Spring框架之后,调用者无需主动获取被依赖对象,调用者只要被动接受Spring容器为调用者的成员变量赋值即可,由此可见,使用Spring后, 调用者获取被依赖对象的方式由原来的主动获取,变成了被动接受 ——所以Rod Johnson(Spring框架创始人)称之为 控制反转 。
另外从Spring容器的角度来看, Spring容器负责将被依赖对象赋值给调用者的成员变量——相当于为调用者注入它依赖的实例 ,因此Martine Fowler称之为 依赖注入 。
Spring IoC容器就是这样的辅助程序,它负责对象的生成和依赖的注入。类的实例化、依赖的实例化、依赖的传入都交由Spring IoC容器控制,而不是用new方式实例化对象、通过非构造函数方法传入依赖等常规方式。
在Spring的应用中,Spring容器负责创建对象,装配对象,配置它们以及管理它们的整个生命周期,从生存到死亡。
容器是Spring框架的核心,Spring自带了多个容器的实现。可以归纳为两种不同的类型:
通常情况下,会使用应用上下文来进行Bean的管理。Spring自带了多种类型的应用上下文,下面列举了几种常见的:
上面的上下文可以分为两类,加载配置文件和配置类。
本文由『后端精进之路』原创,首发于博客 http://teckee.github.io/ , 转载请注明出处
搜索『后端精进之路』关注公众号,立刻获取最新文章和 价值2000元的BATJ精品面试课程 。