Spring学习笔记(一)Spring 概述

来源:互联网 发布:商超软件 编辑:程序博客网 时间:2024/04/29 14:26

Spring概述:

Spring做了什么使我们的开发变得更便利:

Spring希望能够集成管理企业应用资源,以及为应用开发提供平台支持。
基于这一点,Spring与传统操作系统,在计算系统中起到的作用是类似的,不同点在于:

传统操作系统关心的是存储、计算、通信、外围设备等这些物理资源的管理,并且管理这些的基础上,为应用程序提供统一的平台和服务接口。

Spring关心的是,Java企业应用和Web应用中涉及的数据持久化、事务处理、消息中间件、分布式计算等抽象资源,并在此基础上,为应用提供了一个基于POJO的开发环境。

Spring简化Java EE开发的出发点:

通过对POJO开发提供支持和复杂的Java EE服务实现解耦,具体来说,Spring通过为应用基于POJO的开发模式提供支持,从而使应用开发和复杂的Java EE服务实现解耦,并由此通过提高单元测试覆盖率(也就是应用系统的可测试性)来有效地提高整个Spring应用的开发质量

Spring的设计目标:

1、Spring为开发者提供的是一个一站式的轻量级应用开发框架(平台)。
2、抽象了许多在应用开发中遇到的共性问题
3、在Java EE的应用开发中,支持POJO和使用JavaBean的开发方式,使应用面向接口开发,充分支持OO(面向对象)的设计方法。

Spring的生态环境:

Spring Framework(Core):

Spring项目的核心。Spring Framework(Core)中包含了一系列IOC容器的设计,提供了依赖反转模式的实现,同时,还集成了AOP功能;另外,在Spring Framework(Core)中,还包含了其他Spring的基本模块,比如MVC、JDBC、事务处理模块的实现。

Spring Web Flow:

原先的Spring Web Flow是一个建立在Spring MVC基础上的Web工作流引擎。随着自身项目的发展,Web Flow比原来更为丰富,Spring Web Flow定义了一种特定的语言来描述工作流,同时高级的工作流控制器引擎可以管理会话状态,支持AJAX来构建丰富的客户端体验,并且提供对JSF的支持。

这里写图片描述

这张图就是Spring Web Flow的架构图,通过这个图,我们可以了解到,Spring Web Flow实际上是构建在Spring MVC基础上的,是相对于Spring Framework(Core)独立发展的。

Spring BlazeDS Integration:

这是一个提供Spring与Adobe Flex技术集成的模块。在Spring BlazeDS Integration项目中,为Flex前端和后台的通信提供了和Spring开发模式一致的编程模型。实际上使用了BlazeDS 这个由Adobe提供的模块,这个BlazeDS 模块实现了Flex前端展现的和服务器后端处理的通信机制。
在这个实现的基础上,Spring BlazeDS Integration进行了进一步的封装,让这个模块的使用更像是由一个受Spring IOC容器管理的Bean。

Spring Security:

广泛使用的基于Spring的认证和安全工具。

Spring Security OAuth:

这个项目为OAuth在Spring上的集成提供支持。OAuth是一个第三方的模块,提供了一个开发的协议的实现,通过这个协议,前端桌面应用可以对Web应用进行简单而标准的安全调用。

Spring Dynamic Modules:

可以让Spring应用运行在OSGI的平台上。通过使用OSGI平台,增加了应用在部署和运行时的灵活性,Eclipse就是构建在OSGI的平台上,通过这个项目,可以在OSGI平台上方便地运行Spring应用。

Spring Batch:

提供构建批处理应用和自动化操作的框架,这些应用的特点是不需要与用户交互,重复的操作量大,对于大容量的批量数据处理而言,这些操作往往要求较高的可靠性。

这里写图片描述

Spring Integration:

体现了“企业集成模式”的具体体现,并为企业的数据集成提供解决方案。Spring Integration为企业数据集成提供了各种适配器,通过这些适配器来转换各种消息格式,并帮助Spring应用完成与企业应用系统的集成。

Spring AMQP:

Spring更好地使用基于AMQP(高级消息队列协议)的消息服务而开发的,使在Spring应用中使用AMQP消息服务器变得更为简单。

这个项目支持Java和.NET两个版本。SpringSource旗下的Rabbit MQ就是一个开源的基于AMQP的消息服务器,Rabbit MQ是用Erlang语言开发出来的。

Spring Data:

该项目为Spring应用提供使用非关系型数据的能力,比如,当基础数据并非存储在关系数据库中时,又如Map-Reduce中的分布式存储、云计算存储环境等。

Spring应用可以考虑使用Spring Data来操作这种类型的数据。

Spring的整体架构:

这里写图片描述

在这个架构图中,我们可以看到以下Spring基本组成模块。

Spring IoC:

包含了最为基本的IoC容器BeanFactory的接口与实现,也就是说,在这个Spring的核心包中,不仅定义了IoC容器的最基本接口(BeanFactory),也提供了一系列这个接口的实现,如XmlBeanFactory就是一个最基本的BeanFactory(IoC容器)。

XmlBeanFactory:一个最基本的BeanFactory(IoC容器),支持通过XML文件配置的Bean定义信息。

除此之外,Spring IoC容器还提供了一个容器系列,如SimpleJndiBeanFactory、StaticListableBeanFactory等。

单纯一个IoC容器对于应用开发来说是不够的,为了让应用更方便地使用IoC容器,还需要在IoC容器的外围提供其他的支持,包括Resource访问资源的抽象和定位等,所有这些,都是这个Spring IoC模块的基本内容。

另外,在BeanFactory接口的实现中,除了前面介绍的像BeanFactory那样最为基本的容器形态之外,Spring还设计了IoC容器的高级形态ApplicationContext应用上下文供用户使用,这些ApplicationContext应用上下文,如FileSystemXmlApplicationContext、ClassPathXmlApplicationContext,对应用来说,是IoC容器中更面向框架的使用方式,同样,为了便于应用开发,像国际化的消息源和应用支持事件这些特性,也都在这个模块中配合IoC容器来实现,这些功能围绕着IoC基本容器和应用上下文的实现,构成了整个Spring IoC模块设计的主要内容。

Spring AOP:

Spring 的核心模块,围绕着AOP的增强功能,Spring集成了AspectJ作为AOP的一个特定实现,同时还在JVM动态代理/CGLIB的基础上,实现了一个AOP框架,作为Spring集成其他模块的工具,如TransactionProxyFactoryBean声明式事务处理,就是通过AOP集成到Spring中的。

在这个模块中,Spring AOP实现了一个完整的建立AOP代理对象,实现AOP拦截器,直至实现各种Advice通知的过程。

Spring MVC:

这个模块以DispatcherServlet为核心,实现了MVC模式,包括怎样与Web容器环境的集成,Web请求的拦截、分发、处理和ModelAndView数据的返回,以及如何集成各种UI视图展现和数据表现,如PDF、Excel等,通过这个模块,可以完成Web的前端设计。

Spring JDBC/Spring ORM:

对于关系数据库的处理,Java提供了JDBC来进行操作,但在实际的应用中,单纯使用JDBC的方式还是有些繁琐,所以在JDBC规范的基础上,Spring对JDBC做了一层封装,使通过JDBC完成的对数据库的操作更加简洁。

Spring JDBC包还提供了JdbcTemplate作为模板类,封装了基本的数据库操作方法,如数据的查询、更新等;另外,Spring JDBC还提供了RDBMS的操作对象,这些操作对象可以使应用以更面向对象的方法来使用JDBC,比如可以使用MappingSqlQuery将数据库数据记录直接映射到对象集合,类似一个极为简单的ORM工具。

除了通过Spring JDBC对数据库进行操作外,Spring还提供了许多对ORM工具的封装,这些封装包括了常用的ORM工具,如Hibernate、iBatis等,这一层封装的作用是让应用更方便地使用这些ORM工具,而不是替代这些ORM工具,比如可以把对这些工具的使用和Spring提供的声明式事务处理结合起来。

同时,Spring还提供了许多模板对象,如HibernateTemaplate这样的工具来实现Hibernate的驱动,这些模板对象往往包装使用Hibernate的一些通用过程,比如Session的获取和关闭、事务处理的关联等,从而把一些通用的特性实现抽象到Spring中来。

Spring事务处理:

Spring事务处理是一个通过Spring AOP实现自身功能增强的典型模块。在这个模块中,Spring把在企业应用开发中事务处理的主要过程抽象出来,并且简洁地通过AOP的切面增强实现了声明式事务处理的功能。

这个声明式事务处理的实现,使用应用只需要在IoC容器中对事务属性进行配置即可完成,同时,这些事务处理的基本过程和具体的事务处理器实现是无关的,也就是说,应用可以选择不同的具体的事务处理机制,如JTA、JDBC、Hibernate等。

因为使用了声明式事务处理,这些具体的事务处理机制被纳入Spring事务处理的统一框架中完成,并完成与具体业务代码的解耦。

在这个模块中,可以看到一个通用的实现声明式事务处理的基本过程,比如怎样配置事务处理的拦截器,怎样读入事务配置属性,并结合这些事务配置属性对事务对象进行处理,包括事务的创建、挂起、提交、回滚等基本过程,还可以看到具体的事务处理器(如DataSourceTransactionManager、HibernateTransactionManager、JtaTransactionManager等)是怎样封装不同的事务处理机制(JDBC、Hibernate、JTA等)

什么是事务:

事务表示一个由一系列的数据库操作组成的不可分割的逻辑单位,其中的操作要么全做,要么全不做。
与事务相关的的操作主要有:
BEGIN TRANSACTION: 开始一个事务,方法是:begin()
COMMIT: 提交一个事务,方法是:commit()
ROLLBACK:回滚一个事务,方法是:rollback()
PREPARE:准备提交一个事务,方法是:prepare()

事务的特性(ACID):
1、原子性:同一个事务的操作要么全部成功执行,要么全部撤销
2、隔离性:事务的所有操作不会被其他事务干扰
3、一致性:在操作过程中不会破坏数据的完整性
4、时效性:事务的结果必须保存于介质上

事务处理方式:
在JDBC连接中,使用命令声明事务的开始、提交和取消。通过java.sql.Connection接口实现,可以启用AutoCommit。这种方式使用简单,但性能较低。

利用JavaEE规范的JTA驱动程序。这种方式性能更高.
Java EE 的分布式事务服务包括5个层次:事务管理器、应用服务器、资源管理器、应用程序、通信资源管理器。

事务管理器: 完成事务管理
应用服务器: 为应用提供服务
资源管理器: 连接相应的资源
应用程序: 需要使用事务的应用
通信资源管理器: 接收事务、传播事务

JDBC和JTA事务区别:
简单的说 JTA是多库的事务 JDBC是单库的事务
JDBC事务的一个缺点是事务的范围局限于一个数据库连接。一个JDBC事务不能跨越多个数据库。

JTA事务:

JTA(Java Transaction API)提供了跨数据库连接(或其他JTA资源)的事务管理能力。JTA事务管理则由JTA容器实现,J2ee框架中事务管理器与应用程序、资源管理器,以及应用服务器之间的事务通讯。

具体相关模块等以后专门详细介绍。

Spring 远程调用:

Spring为应用带来的一个好处就是能够将应用解耦。应用解耦,一方面可以降低设计的复杂性,另一方面,可以在解耦以后将应用模块分布式部署,从而提高系统整体的性能。

在后一种应用场景下,会用到Spring的远程调用,这种远程调用是通过Spring的封装从Spring应用到Spring应用之间的端到端调用。在这个过程中,通过Spring的封装,为应用屏蔽了各种通信和调用细节的实现,同时,通过这一层的封装,使应用可以通过选择各种不同的远端调用来实现,比如可以使用HTTP调用器(以HTTP协议为基础的),可以使用第三方的二进制通信实现Hessian/Burlap,甚至还封装了传统Java技术中的RMI调用。

Spring应用:

从严格意义上来说,这个模块不属于Spring的范围。这部分的应用支持,往往来自一些使用得非常广泛的Spring子项目,或者该子项目本身就可以看成是一个独立的Spring应用,比如为Spring处理安全问题的Spring ACEGI后来转化为Spring子项目的Spring Security OAuth等。

这个Spring应用支持的部分还有一个重要的组成,那就是包括了其他的一些模块,这些模块提供了许多Spring应用与其他技术实现的相关接口,比如与各种J2ee实现规范的接口,对JMS、JNDI、JMX、JavaMail等的支持,Spring应用和Flex前端的接口,Spring应用移植到OSGI平台上运行的接口。

0 0
原创粉丝点击