Spring
Spring 简介
Spring 框架可以在任何类型的部署平台为基于Java Web现代的企业应用程序而提供的全面编程和配置模型。是当前主流的Java开发框架之一,为企业级应用开发提供了丰富的使用功能。
Spring 的意思
在Spring的官方API帮助文档中,有一句官方的表述是:
”Spring 在不同的上下文中表示不同的事物,他可以用于指代Spring Framework项目的本身,而Spirng的意识是寓意,这一切都是从这里开始的。随着时间的流逝,其他的Spring项目已经在Spring Framework基础上进行构建,通常人们说到Spirng的时候,他们将会表示整个项目的系列。如果有人跟你说的是Spring boot,那他一定不是泛指所有Spring项目,而是单指Spring boot这一系列。“
Spring 概括
Spring是一个轻量级的开发框架,最初由Rod Johnson编写,在2003年6月首次在Apache 2.0许可证下发布,象征着Spring在那刻前正式开源,之后有很多开发者加入到一起来进行维护和开发,而Spring创建的主要目的就是解决企业应用开发的业务逻辑层的问题,是一个分层的轻量级开源框架(且一站式)
Spring 体系结构
Spring 常用结构
Spirng 本书所使用的结构
Data Access - Integration / World Wide Web(数据访问和集成/Web)
Data Access / Integration
| ID | DA | FA |
|---|---|---|
| JDBC | 提供了一个JDBC的抽象层 | 消除了繁琐的JDBC编码和数据库厂商特有的错误代码解析 |
| ORM | 对流行的对象关系映射API的集成(Object-Relational apping),包括JPA、Hibenate | 使用Spring-ORM可将这些O/R映射框架与Spring提供的所有功能结合使用 |
| OXM | 提供了一个支持对象/XML映射的抽象层实现 | 如JAXB、Castor、XML Beans、JiBX、XStream等 |
| JMS | 指Java消息传递服务,包含了用于生产和使用的消息功能 | 自Spring 4.1以后,提供那个了与Spring-messaging模块的集成 |
World Wide Web
| ID | DA | FA |
|---|---|---|
| Web-Socket | 提供了对WebSocket-based的支持 | 在Web应用中可以实现Web前端全双工通信的协议。 |
| Web-Servlet(webmvc) | 包含了用于Web应用程序的Spring MVC和 REST Web Services实现 | 提供了Spring下的MVC框架可以使全领域模型代码和web表单完全的分离,与Spring框架和其他所有功能进行集成 |
| Web | 提供了基本的Web开发集成功能 | 多文件上传功能、使用Servlet监听器初始化一个Ioc容器以及Web应用上下文 |
| Portlet (Spring-webmvc-portlet) | 提供Portlet环境中使用MVC的实现,并反映了Spring-webmvc的模块功能 | |
| Webflux | 是一个非阻塞式函数Reactive Web框架 | 可用于建立异步、非阻塞、事件驱动服务,并拥有很好的扩展性 |
AAIM(Aop、Aspects、Instrumentation、Messaging)
面向切面编程(AOP) 和 使用容器(Instrumentation)
该层主要有AOP、Aspects、Instrumentation、Messaging四个模块,其主要模块响应的功能有:
| ID | DA | FA |
|---|---|---|
| AOP | 提供了一个符合APO要求的面向切面的编程实现 | 允许在定义方法拦截器和切入点,可将代码按照功能进行分离,方便干净的进行解藕 |
| Aspects | 是一个强大且成熟的面向切面编程(AOP)框架 | 提供了AspectJ的集成功能 |
| Instrumentation | 提供了类植入(Instrumentation)支持和类的加载器实现,而Instrumentation提供了一种虚拟机级别的支持的AOP实现方式 | 无需对JDK进行改动或升级,可实现AOP的某些功能 |
消息(Spring-Messaging)
Messaging是Spring 4.0所增加的信息模块“Spring-messaging”,其主要提供了对信息传递的结构体系和协议支持,且支持为STOMP、WebSocket等子协议时候使用。
Spring 核心容器
Spring的核心容器是其他模块建立的基础部分,主要由Spring-core、Spring-beans、Spring-Context、Spring-context-support、Spring-expression(Spring表达式语言)模块所组成:
| ID | DA | FA |
|---|---|---|
| Spring-core | 提供了框架的基本组成部分 | 控制反转(ioc,Inversion of Control)、依赖注入(DI,Dependency Injection) |
| Spring-Beans | 是工厂模式的经典实现,主要移除了编码式的单列需要,可从配置和以来从实际编码逻辑中耦合 | 提供了BeanFactory |
| Spring-context | 主要建立在core、Beans之上,提供了一个框架式的对象访问方式,是一个访问定义、配置、任何对象的媒介 | context |
| Spring-context-support | 支持整合得到第三方库到Spring应用程序上下文,用于高速缓存(EhCache,JCache)和任务调度(COmmonJ,Quartz)的支持。 | |
| Spring-expression | 提供了强大的表达式语言,用于在运行时查询和操作对象图 ,是JSP2.1规范中定义统一表达式语言扩展(Unified EL) | 支持set和get属性值、属性赋值、方法调用、访问数组集合等索引内容,逻辑运算符、命名变量、通过名字从 ```Spring-Ioc容器检索对象,支持列表投影、选及其常见列表聚合 |
Spring-Beans 工厂模式
Spring-Beans工厂模式主要是代替了Java中的new 的实例化操作, 虽然这样做会做多一点工作,但是会增加整个项目的可扩展性。也就是说,当需要实例化类或方法的时候,new的工作会由一个class类所执行,所以在本类之中可以直接使用工厂模式进行开发。
