文章目录
- 一、Spring概念
- 二、Spring特征
- 三、Spring基本架构
- 3.1Spring体系结构
- 3.2Core Container(核心容器)
- 3.3Data Access/Integration(数据访问/集成)
- 3.4Web(MVC/Remoting)
- 3.5Test(测试)
- 3.6AOP(面向切面编程)
- 四、Spring主要jar包
- 五、Spring用到的设计模式
一、Spring概念
什么是Spring?
Spring是一个轻量级的开源框架, 主要是为了解决企业应用程序(J2EE)开发复杂性而创建(简化Java开发)。
为了降低Java开发的复杂性,Spring采取以下几种关键策略:
- 基于POJO的轻量级和最小侵入性编程;
- 通过依赖注入和面向接口实现松耦合;
- 基于切面进行声明式编程和减少样板代码。
Spring设计目标
Spring为开发提供一个一站式轻量级应用开发平台。
Spring设计理念
在JavaEE开发中,支持POJO和JavaBean开发方式,可以面向接口开发,通过IOC实现对象耦合关系的管理,并实现依赖反转,将对象之间的依赖关系交给IOC容器管理,实现解耦。
Spring的核心
IOC容器和AOP模块。通过IOC容器管理POJO对象以及他们之间的联系;通过AOP以动态非侵入式的方式增强服务。
Spring应用场景
J2EE企业应用开发,包括SSH、SSM等。
二、Spring特征
- 轻量: 完整的Spring框架可以在一个大小只有1MB多的JAR文件里发布。并且Spring所需的处理开销也是微不足道的。此外,Spring是非侵入式的:典型地,Spring应用中的对象不依赖于Spring的特定类。
- 控制反转(IOC- Inversion of Control ):Spring通过控制反转技术降低代码的耦合度,能把一个对象依赖的其他对象通过被动的方式传递进来(DI- Dependency Injection ),而不是这个对象自己创建或者查找依赖对象。 它的底层设计模式采用了工厂模式,所有的 Bean 都需要注册到Bean工厂中,将其初始化和生命周期的监控交由工厂实现管理。程序员只需要按照规定的格式进行Bean开发,然后利用XML文件进行bean 的定义和参数配置,其他的动态生成和监控就不需要调用者完成,而是统一交给了平台进行管理。
- 面向切面(AOP- Aspect Oriented Programming ):Spring支持面向切面的编程,并把业务逻辑与系统服务分开,开发人员只要注重业务逻辑就行。
- 容器:Spring包含管理应用对象(bean)的配置和生命周期,可以开发自己配置bean的创建、初始化、销毁等。 核心通过
Bean factory
实现了底层的类的实例化和生命周期的管理。 - 框架:Spring将简单的组件组成复杂的应用;对应用对象被声明的组合可以在XML文件里;提供多种功能,例如事务、其他框架的集成等。
- MVC: 客户端发送请求,服务器控制器(由DispatcherServlet实现的)完成请求的转发,控制器调用一个用于映射的类HandlerMapping,该类用于将请求映射到对应的处理器来处理请求。HandlerMapping 将请求映射到对应的处理器Controller(相当于Action)在Spring 当中如果写一些处理器组件,一般实现Controller 接口,在Controller 中就可以调用一些Service 或DAO 来进行数据操作 ModelAndView 用于存放从DAO 中取出的数据,还可以存放响应视图的一些数据。 如果想将处理结果返回给用户,那么在Spring 框架中还提供一个视图组件ViewResolver,该组件根据Controller 返回的标示,找到对应的视图,将响应response 返回给用户。
三、Spring基本架构
3.1Spring体系结构
Spring 框架是是一个分模块存在,除了核心的Spring Core Container外是必要模块,其他20多个模块是可选的:
3.2Core Container(核心容器)
Core Container(核心容器):核心容器提供 Spring 框架的基本功能(Spring Core)。核心容器的主要组件是 BeanFactory
,它是工厂模式的实现。BeanFactory 使用控制反转(IOC
) 模式将应用程序的配置和依赖性规范与实际的应用程序代码分开 。
核心容器由 spring-core,spring-beans,spring-context,spring-context-support和spring-expression(SpEL,Spring 表达式语言-Spring Expression Language)等模块组成,它们的细节如下:
- spring-core模块:提供了框架的基本组成部分,包括
IOC
和DI
功能。 - spring-beans模块:提供
BeanFactory
,工厂模式的微妙实现,它移除了编码式单例的需要,并且可以把配置和依赖从实际编码逻辑中解耦。 - spring-context模块:建立在由 spring-core和 spring-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 容器检索对象,还支持列表的投影、选择以及聚合等。
它们的依赖关系如图:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HMgITTfI-1671256722623)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1671200641615.png)]
3.3Data Access/Integration(数据访问/集成)
数据访问/集成层包括 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 支持编程式和声明式事务管理。(注:编程式事务需要自己写 beginTransaction()、commit()、rollback() 等事务管理方法,声明式事务是通过注解(
@Transactional
)或配置由 spring 自动处理,编程式事务粒度更细)
3.4Web(MVC/Remoting)
Web 层由 Web,Web-MVC,Web-Socket 和 Web-Portlet 组成,它们的细节如下:
- 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 模块的功能。
3.5Test(测试)
Test 模块:Spring 支持 Junit
和 TestNG
测试框架,而且还额外提供了一些基于 Spring 的测试功能,比如在测试 Web 框架时,模拟 Http 请求的功能。
3.6AOP(面向切面编程)
四、Spring主要jar包
org.springframework:spring-core
:spring的核心,其他jar包依赖此包org.springframework:spring-beans
:所有应用都用到,包含访问配置文件,创建和管理bean等。org.springframework:spring-aop
:spring的面向切面编程,提供AOP的实现。org.springframework:spring-context
:提供在基础IOC功能上的扩展服务,还提供许多企业级服务的支持,例如邮件服务、任务调度、JNDI定位、EJB集成、远程访问、缓存以及多种视图层框架的支持。org.springframework:spring-webmvc
:包含spring mvc 应用开发时所需的核心类。org.springframework:spring-web
:包含web应用开发时,所需的核心类。org.springframework:spring-jdbc
:对JDBC的简单封装。org.springframework:spring-tx
:spring transaction,为JDBC、Hibernate、JDO、JPA提供一致的声明式和编程式事务管理。org.springframework:spring-context-support
:对spring context的扩展,用于MVC方面。org.springframework:spring-expression
:spring表达式语言org.springframework:spring-jms
:简化jms api的使用,简单的封装了一下。org.springframework:spring-aspects
:spring提供对AspectJ框架的整合。org.springframework:spring-test
:对Junit等测试框架等简单封装。org.springframework:spring-orm
:整合第三方orm的实现,例如hibernate、ibatis、jdo、jap等。org.springframework:spring-oxm
:sping对object/xml映射的支持,对java和xml来回切换。
五、Spring用到的设计模式
- 工程模式:BeanFactory就是简单工厂模式的实现,用来创建对象的实例。
- 单例模式:Bean的默认为单例模式。
- 代理模式:Spring的AOP功能用到了JDK的动态代理和CGLIB字节码生成技术。
- 模板方法:用来解决代码重复问题,例如RestTemplate、JmsTemplate等。
- 观察者模式:定义对象键一种一对多的依赖关系,当一个对象的状态发生改变,所有依赖于它的对象都会得到通知被动更新,例如Spring的listener的实现:ApplicationListener