1.Spring概述
1.1 什么是框架?
1、框架本身是不完整的,是一个半成品,可以解决特定问题
2、框架天生就是为扩展而设计的
3、框架里面可以为后续扩展的组件提供很多辅助性、支撑性的方便易用的实用工具(utilities), 也就是说框架时常配套了一些帮助解决某类问题的库(libraries)或工具(tools)。
如何学习框架呢?
1、知道框架能做什么
2、学习框架的语法,一般框架完成一个功能需要一定的步骤
3、框架的内部实现原理(扩展)
4、尝试实现一个框架(提升)
1.2 Spring是什么
Spring官网 https://spring.io
Spring 被称为 J2EE 的春天,是一个是分层的 Java SE/EE full-stack(全栈) 开源的轻量级的 Java 开发框架, 是最受欢迎的企业级 Java 应用程序开发框架,数以百万的来自世界各地的开发人员使用 Spring 框架来创建性能好、易于测试、可重用的代码。
Spring具有控制反转(IoC)和面向切面(AOP)两大核心。Java Spring 框架通过声明式方式灵活地进行事务的管理,提高开发效率和质量。
Spring 框架不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何 Java 应用都可以从 Spring 中受益。Spring 框架还是一个超级粘合平台,除了自己提供功能外,还提供粘合其他技术和框架的能力。
1.3 Spring的优势
1、方便解耦,简化开发
Spring 就是一个大工厂,可以将所有对象的创建和依赖关系的维护交给 Spring 管理。
2、方便集成各种优秀框架
Spring 不排斥各种优秀的开源框架,其内部提供了对各种优秀框架(如 Struts2、
Hibernate、 MyBatis 等)的直接支持。
3、降低 Java EE API 的使用难度
Spring 对 Java EE 开发中非常难用的一些 API(JDBC、JavaMail、远程调用等)都提供了
封装, 使这些 API 应用的难度大大降低。
4、方便程序的测试
Spring 支持 JUnit4,可以通过注解方便地测试 Spring 程序。
5、AOP 编程的支持
Spring 提供面向切面编程,可以方便地实现对程序进行权限拦截和运行监控等功能。
6、声明式事务的支持
只需要通过配置就可以完成对事务的管理,而无须手动编程。
1.4 Spring的体系结构
Spring 为我们提供了一站式解决方案,但Spring 是模块化的,允许咱们挑选和选择适用于项目的模块, 不需要把剩余部分也引入
Spring 框架提供约 20 个模块,可以根据应用程序的要求来选择
1.4.1 核心容器(Core Container)
核心容器由 Spring-core,Spring-beans,Spring-context,Spring-context-support和Springexpression(SpEL,Spring 表达式语言,Spring Expression Language)等模块组成
Spring-core 模块提供了框架的基本组成部分,包括 IoC 和依赖注入(DI)功能。
Spring-beans 模块提供 BeanFactory,工厂模式的微妙实现,它移除了编码式单例的需要,并且可以把配置和依赖从实际编码逻辑中解耦。
context 模块建立在由 core和 beans 模块的基础上建立起来的,它以一种类似于 JNDI 注册的方 式访问对象。Context 模块继承自 Bean 模块,并且添加了国际化(比如,使用资源束)、事件传 播、资源加载和透明地创建上下文(比如,通过 Servelet 容器)等功能。Context 模块也支持 Java EE 的功能,比如 EJB、JMX 和远程调用等。ApplicationContext 接口是 Context 模块的焦点。
Spring-context-support 提供了对第三方集成到 Spring 上下文的支持,比如缓存(EhCache, Guava, JCache)、邮件(JavaMail)、调度(CommonJ, Quartz)、模板引擎(FreeMarker, JasperReports, Velocity)等。
Spring-expression 模块提供了强大的表达式语言,用于在运行时查询和操作对象图。它是 JSP2.1 规范中定义的统一表达式语言的扩展,支持 set 和 get 属性值、属性赋值、方法调用、访问数组集合及索引的内容、逻辑算术运算、命名变量、通过名字从 Spring IoC 容器检索对象,还支持列表的 投影、选择以及聚合等。
它们的完整依赖关系如下图所示:
1.4.2 数据访问/集成(Data Access)
JDBC=Java Data Base Connectivity
ORM=Object Relational Mapping
OXM=Object XML Mapping
JMS=Java Message Service
JDBC 模块提供了 JDBC 抽象层,它消除了冗长的 JDBC 编码和对数据库供应商特定错误代码的解析。
ORM 模块提供了对流行的对象关系映射 API 的集成,包括 JPA、JDO 和 Hibernate 等。通过此模块可以让这些 ORM 框架和 Spring的其它功能整合,比如前面提及的事务管理。
OXM 模块提供了对 OXM 实现的支持,比如 JAXB、Castor、XML Beans、JiBX、XStream 等。
JMS 模块包含生产(produce)和消费(consume)消息的功能。从 Spring 4.1 开始,集成了 Spring-messaging 模块。
事务 模块为实现特殊接口类及所有的 POJO 支持编程式和声明式事务管理。
1.4.3 Web
Web 模块提供面向 web 的基本功能和面向 web 的应用上下文,比如多部分(multipart)文件上 传功能、使用 Servlet 监听器初始化 IoC 容器等。它还包括 HTTP 客户端以及 Spring 远程调用中与 web 相关的部分。
Web-MVC 模块为 web 应用提供了模型视图控制(MVC)和 REST Web服务的实现。Spring 的 MVC 框架可以使领域模型代码和 web 表单完全地分离,且可以与 Spring 框架的其它所有功能进行集成。
Web-Socket 模块为 WebSocket-based 提供了支持,而且在 web 应用程序中提供了客户端和服 务器端之间通信的两种方式。
Web-Portlet 模块提供了用于 Portlet 环境的 MVC 实现,并反映了 Spring-webmvc 模块的功能。
其他:
AOP 模块提供了面向方面(切面)的编程实现,允许你定义方法拦截器和切入点对代码进行干净地解耦,从而使实现功能的代码彻底的解耦出来。
Aspects 模块提供了与 AspectJ 的集成,这是一个功能强大且成熟的面向切面编程(AOP)框 架。
Instrumentation 模块在一定的应用服务器中提供了类 instrumentation 的支持和类加载器的实 现。
Messaging 模块为 STOMP 提供了支持作为在应用程序中 WebSocket 子协议的使用。它也支持一 个注解编程模型,它是为了选路和处理来自 WebSocket 客户端的 STOMP 信息。
测试 模块支持对具有 JUnit 或 TestNG 框架的 Spring 组件的测试。