一、什么是 Spring 框架 首先来介绍一下 Spring , 打开 Spring 官网我们可以看到 Spring 有众多框架,比如 SpringMVC、 SpringBoot、 Spring Cloud 等等,它是这些框架的集合,而 Spring Framework 是 Spring 里面的一个开源框架,并且 Spring 框架是其它框架的核心和基础。
下面来看看 Spring 4.0 框架
在实际的开发中,服务器端通常采用三层体系架构,分别为表现层 (web)、业务逻辑层(service)、持久层(dao)。Spring 致力于 Java EE 应用各层的解决方案,对每一层都提供了技术支持。在表现层提供了与 Spring MVC、Struts2 框架的整合,在业务逻辑层可以管理事务和记录日志等,在持久层可以整合 MyBatis、Hibernate 和 JdbcTemplate 等技术。
1. IoC IoC(Inversion of Control,翻译为“控制反转”)不是一个具体的技术,而是一种设计思想。与传统控制流相比,IoC 会颠倒控制流,在传统的编程中需要开发者自行创建并销毁对象,而在 IoC 中会把这些操作交给框架来处理,这样开发者就不用关注具体的实现细节了,拿来直接用就可以了,这就是控制反转。
当需要对象时,通过 IoC 容器帮对象找到相应的依赖直接注入。不用对象主动去获取.
2. DI DI(Dependency Injection,翻译为“依赖注入”)表示组件间的依赖关系交由容器在运行期自动生成,也就是说,容器知道哪个组件(类)运行的时候,需要哪个类;容器就能通过反射的形式将容器中准备好的对象注入(这里使用的是反射给属性赋值)到需求的组件中去 。
IoC 和 DI 事实上是同一概念从不同角度描述的,依赖注入其实就是控制反转思想的实现
3.AOP AOP 的全称是 “Aspect Oriented Programming", 即面向切面编程。和 OOP (面向对象编程)类似,是一种编程思想。AOP 采取横向抽取机制(动态代理),取代了传统纵向继承机制的重复性代码,其应用主要体现在事务处理、日志管理、权限控制、异常处理等方面。是开发人员可以集中处理某个关注点或横切逻辑,减少对业务代码的侵入,增强代码的可读性和可维护性。
AOP 的作用就是保证开发者在不修改源代码的前提下,为系统中的业务组件添加某种通用功能。AOP 就是代理模式的典型应用。
二、Spring 的体系结构 1. Core Container 模块 在 Spring 框架模块中,最重要的是核心容器,它是框架的基础。从图中可以看到,核心组件有四个部分,Beans 、Core 核心组件、Context 上下文组件和 SpEL 表达式语言组件组成。核心容器在项目构建时必须导入。
Beans 组件(spring-beans):主要解决了 Bean 的定义、创建和解析,也就是 Bean 工厂与 Bean 的装配。 Core 组件(spring-core): IoC 和 DI 的最基本实现。 Context (spring-context)组件:建立在 Core 和 Beans 模块的基础之上,ApplicationContext 接口是上下文模块的焦点。 SpEL (spring-expression)组件:提供强大的表达式语言支持,支持访问和修改属性值。 它们之间的依赖关系:
由于 spring-core 依赖 commons-logging 所以其他模块都依赖 logging
2. AOP、Aspects、Instrumentation 和 Messaging AOP 组件(spring-aop): 提供面向切面编程实现,比如日志记录、权限控制等通用功能和业务逻辑分离技术。降低业务逻辑和通用功能的耦合。 Aspects 组件(spring-aspects):提供 AspectJ 的集成,是一个功能强大且成熟的 AOP 框架。 Instrumentation 组件(spring-instrumentation):提供类工具的支持和类加载器的实现。 messaging 组件(spring-messageing): 提供对消息传递体系结构和协议的支持。 依赖关系:
3. Data Access/Integration (数据访问/集成) JDBC 组件(spring-jdbc):提供了一个 JBDC 支持 ORM 模块:对象关系映射,集成 orm 框架包括有 JPA、JDO、Hibernate 和 MyBatis 等。而且还可以使用 Spring 事务管理,无需额外控制事务。 OXM 组件(spring-oxm):提供了一个支持 Object /XML 映射的抽象层实现,如 JAXB、Castor、XMLBeans、JiBX 和 XStream。将 Java 对象映射成 XML 数据,或者将XML 数据映射成 Java 对象。 JMS 组件(spring-jms):指 Java 消息服务,提供一套 “消息生产者、消息消费者”模板用于更加简单的使用 JMS,JMS 用于用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。 Transactions 事务组件(spring-tx):支持编程和声明式事务管理。 它们的依赖关系:
4. web 模块 Web 组件(spring-web):提供了基本的 Web 开发集成特性,例如多文件上传功能、使用的 Servlet 监听器的 IOC 容器初始化以及 Web 应用上下文。 Servlet 组件(spring-webMVC):提供了一个 Spring MVC Web 框架实现。Spring MVC 框架提供了基于注解的请求资源注入、更简单的数据绑定、数据验证等及一套非常易用的 JSP 标签,完全无缝与 Spring 其他技术协作。 WebSocket 组件(spring-webSocket):提供了简单的接口,用户只要实现响应的接口就可以快速的搭建 WebSocket Server,从而实现双向通讯。 Portlet 组件:提供了在 Portlet 环境中使用 MVC 实现,类似 Web-Servlet 模块的功能。 它们的依赖关系:
5. Test模块 spring-test 模块支持 JUnit 或 TestNG 对 Spring 组件进行单元测试和集成测试。并且还额外提供了一些基于 Spring 的测试功能,比如在测试 Web 框架时,模拟 Http 请求的功能。
参考文献 1. spring framework 核心框架体系结构
2. spring 体系结构