spring学习之spring简介

什么是spring

一句话概括,spring是分层的java SE/EE 应用一站式的轻量级开源框架,以IOC(控制反转)和AOP(切面编程)为内核,提供了展现层Spring MVC、持久层Spring JDBC及业务层失误管理等一站式的企业级应用技术,此外还可以整合其他第三方开源框架和类库。

简单来说,spring就是一个轻量级且支持扩展的开源框架。

为什么使用spring

在没有spring之前,开发企业级应用我们只能依靠EJB。而EJB采取了一套极其复杂的的标准:所有的应用都需要分布式对象、远程事务。因而,开发、测试、部署无疑还需要很多额外的工作,尤其是测试。因为这种测试不能脱离EJB容器,每次测试都需要应用部署并启动EJB容器,而部署和启动EJB容器是 一项费时费力的重型操作,其结果是测试工作往往成为开发工作的瓶颈。

但EJB并非一无是处,声明事务,透明持久化等都是可圈可点的,只是实现太复杂了而已。无疑,spring在提供类似服务的同时尽量简化开发。spring一直贯彻并遵守:好的设计优于具体实现,代码应易于测试。那么,spring给我们带来了什么?

方便解耦,简化开发

通过spring提供的IOC容器,用户可以将对象之间的依赖关系交由Spring进行控制。避免硬编码所造成的过度程序耦合。有了spring,用户不必再为单例模式类、属性文件解析等这些底层的需求编写代码,可以更专注于上层的实现。

AOP编程的支持

通过Spring提供的AOP功能,方便进行面向切面的编程,很多不容易用传统OOP实现的功能可以通过AOP轻松实现。

声明式事务的支持

在spring中,用户可以从单调烦闷的事务管理代码中解脱出来,通过声明的方式灵活地进行事务管理,提高开发效率和质量管理。

方便程序的测试

可以用非容器依赖的编程方式进行几乎所有的测试工作。

方便集成各种优秀框架

在spring中,不仅不排斥各种优秀的开源框架,相反,还可以降低何种框架的使用难度。spring提供了对各种优秀框架(Struts、mybatis、hibernate)的直接支持。

降低了java EE API的使用难度

spring对很多难用的java EE API(如JDBC、javaMail、远程调用等)提供了一个薄层封装,通过spring的简易封装,这些API的使用难度将大大降低了。

java源码是经典的学习典范

spring源码处处体现大师对设计模式的灵活应用及对java技术的高深造诣。spring源码无疑是java技术的最佳实现范例。如果想在短时间内迅速提高自己的java技术和应用开发水平,学习和研究spring源码将会收到意想不到的效果。

Spring的体系架构

先看一张官网给出的图:
这里写图片描述

从整体来看,这5个模块几乎为企业应用提供了所需的一切,从持久层、业务层到展现层都拥有相应的支持。IOC和AOP是spring所依赖的根本,这个我们接下来会结合例子重点讲。在这基础上,spring整合了各种企业应用开源框架和许多优秀的第三方类库,成为java企业应用full-stack的开发框架。这也正是spring的精妙之处,spring并不会强求开发者使用指定的开源框架,将选择权留给开发者,它只提供平滑的过渡。

IOC

前面已经说过了,通过spring的IOC容器,可以解耦对象之间的依赖。spring的IOC功能将类与类之间的依赖从代码中脱离出来,用配置的形式进行依赖关系描述,由IOC容器负责依赖类之间的创建、拼接、管理、获取等工作。BeanFactory接口是spring框架的核心接口,它实现了容器的很多核心功能。

Context模块构建于核心模块之上,扩展了BeanFactory的功能,添加了i18n国际化,Bean生命周期控制,框架事件体系、资源加载透明化等多项功能。此外,该模块还提供了许多企业级服务的支持,如邮件服务、任务调度、JNDI获取、EJB集成、远程访问等。ApplicationContext是Context模块的核心接口。

表达式语言模块是统一表达式语言(Unified EL)的一个扩展,该表达式语言应用于查询和管理运行期的现象,支持设置/获取对象属性,调用对象方法,操作数组、集合等。此外,该模块还提供了逻辑表达式运算、变量定义等功能,可以方便地通过表达式串和spring IOC容器进行交互。

AOP

AOP是进行横切逻辑编程的思想,它开拓了考虑问题的思路。spring不仅提供了满足AOP Alliance规范的实现,还整合了AspectJ这种AOP语言级的框架。在spring里实现AOP编程有众多选择。具体的实现,我们在下篇详细再讲。

数据访问和集成

数据有多种表现形式,如数据表、XML、消息等,每种数据形式又有不同的数据访问技术(如数据表的访问既可以通过JDBC,也可以通过Hibernate或MyBatis)。

首先,spring建立了一套面向DAO层统一的异常体系,同时将各种访问数据的检查型异常转换为非检查型异常,为整合各种持久层框架提供基础。其次,spring通过模板化技术福各种数据访问技术进行了薄层封装,将模块化的代码隐藏起来,使数据访问的程序得到很大幅简化。这样,spring就建立了和数据形式及其访问技术无关的统一的DAO层,借助AOP技术,spring提供了声明式事务的功能。

web及远程访问

该模块建立在ApplicationContext模块之上,提供web应用的各种工具类,如通过Listener或servlet初始化spring容器,将spring容器注册到web容器中。该模块还提供了多项面向web的功能,如透明化文件上传、velocity、freemarker的支持。此外,spring还整合了Struts、webwork等MVC框架。

WebSocket

WebSocket提供了一个在web应用中高效、双向的通信,需要考虑客户端(浏览器)和服务器之间的高频和低时延消息交换。此外,spring在远程访问及web service上提供了很多著名框架的整合。

以上都是简单地提了一下spring的一些特性及架构,在接下来的篇章中将以实例来讲解祥光的内容。敬请期待……

猜你喜欢

转载自blog.csdn.net/lks1139230294/article/details/73649963