【第一章】 Spring概述 ——跟我学Spring3

1.1.1  Spring是什么

Spring是一个开源的轻量级Java SE(Java 标准版本)/Java EE(Java 企业版本)开发应用框架,其目的是用于简化企业级应用程序开发。应用程序是由一组相互协作的对象组成。而在传统应用程序开发中,一个完整的应用是由一组相互协作的对象组成。所以开发一个应用除了要开发业务逻辑之外,最多的是关注如何使这些对象协作来完成所需功能,而且要低耦合、高内聚。业务逻辑开发是不可避免的,那如果有个框架出来帮我们来创建对象及管理这些对象之间的依赖关系。可能有人说了,比如“抽象工厂、工厂方法设计模式”不也可以帮我们创建对象,“生成器模式”帮我们处理对象间的依赖关系,不也能完成这些功能吗?可是这些又需要我们创建另一些工厂类、生成器类,我们又要而外管理这些类,增加了我们的负担,如果能有种通过配置方式来创建对象,管理对象之间依赖关系,我们不需要通过工厂和生成器来创建及管理对象之间的依赖关系,这样我们是不是减少了许多工作,加速了开发,能节省出很多时间来干其他事。Spring框架刚出来时主要就是来完成这个功能。

Spring框架除了帮我们管理对象及其依赖关系,还提供像通用日志记录、性能统计、安全控制、异常处理等面向切面的能力,还能帮我管理最头疼的数据库事务,本身提供了一套简单的JDBC访问实现,提供与第三方数据访问框架集成(如Hibernate、JPA),与各种Java EE技术整合(如Java Mail、任务调度等等),提供一套自己的web层框架Spring MVC、而且还能非常简单的与第三方web框架集成。从这里我们可以认为Spring是一个超级粘合平台,除了自己提供功能外,还提供粘合其他技术和框架的能力,从而使我们可以更自由的选择到底使用什么技术进行开发。而且不管是JAVA SE(C/S架构)应用程序还是JAVA EE(B/S架构)应用程序都可以使用这个平台进行开发。让我们来深入看一下Spring到底能帮我们做些什么?

1.1.2   Spring能帮我们做什么

Spring除了不能帮我们写业务逻辑,其余的几乎什么都能帮助我们简化开发:

一、传统程序开发,创建对象及组装对象间依赖关系由我们在程序内部进行控制,这样会加大各个对象间的耦合,如果我们要修改对象间的依赖关系就必须修改源代码,重新编译、部署;而如果采用Spring,则由Spring根据配置文件来进行创建及组装对象间依赖关系,只需要改配置文件即可,无需重新编译。所以,Spring能帮我们根据配置文件创建及组装对象之间的依赖关系。

二、当我们要进行一些日志记录、权限控制、性能统计等时,在传统应用程序当中我们可能在需要的对象或方法中进行,而且比如权限控制、性能统计大部分是重复的,这样代码中就存在大量重复代码,即使有人说我把通用部分提取出来,那必然存在调用还是存在重复,像性能统计我们可能只是在必要时才进行,在诊断完毕后要删除这些代码;还有日志记录,比如记录一些方法访问日志、数据访问日志等等,这些都会渗透到各个要访问方法中;还有权限控制,必须在方法执行开始进行审核,想想这些是多么可怕而且是多么无聊的工作。如果采用Spring,这些日志记录、权限控制、性能统计从业务逻辑中分离出来,通过Spring支持的面向切面编程,在需要这些功能的地方动态添加这些功能,无需渗透到各个需要的方法或对象中;有人可能说了,我们可以使用“代理设计模式”或“包装器设计模式”,你可以使用这些,但还是需要通过编程方式来创建代理对象,还是要耦合这些代理对象,而采用Spring 面向切面编程能提供一种更好的方式来完成上述功能,一般通过配置方式,而且不需要在现有代码中添加任何额外代码,现有代码专注业务逻辑。所以,Spring 面向切面编程能帮助我们无耦合的实现日志记录,性能统计,安全控制。

三、在传统应用程序当中,我们如何来完成数据库事务管理?需要一系列“获取连接,执行SQL,提交或回滚事务,关闭连接”,而且还要保证在最后一定要关闭连接,多么可怕的事情,而且也很无聊;如果采用Spring,我们只需获取连接,执行SQL,其他的都交给Spring来管理了,简单吧。所以,Spring能非常简单的帮我们管理数据库事务。

四、Spring还提供了与第三方数据访问框架(如Hibernate、JPA)无缝集成,而且自己也提供了一套JDBC访问模板,来方便数据库访问。

五、Spring还提供与第三方Web(如Struts、JSF)框架无缝集成,而且自己也提供了一套Spring MVC框架,来方便web层搭建。

六、Spring能方便的与Java EE(如Java Mail、任务调度)整合,与更多技术整合(比如缓存框架)。

Spring能帮我们做这么多事情,提供这么多功能和与那么多主流技术整合,而且是帮我们做了开发中比较头疼和困难的事情,那可能有人会问,难道只有Spring这一个框架,没有其他选择?当然有,比如EJB需要依赖应用服务器、开发效率低、在开发中小型项目是宰鸡拿牛刀,虽然发展到现在EJB比较好用了,但还是比较笨重还需要依赖应用服务器等。那为何需要使用Spring,而不是其他框架呢?让我们接着往下看。

1.1.3    为何需要Spring

一 首先阐述几个概念

1、应用程序:是能完成我们所需要功能的成品,比如购物网站、OA系统。

2、框架:是能完成一定功能的半成品,比如我们可以使用框架进行购物网站开发;框架做一部分功能,我们自己做一部分功能,这样应用程序就创建出来了。而且框架规定了你在开发应用程序时的整体架构,提供了一些基础功能,还规定了类和对象的如何创建、如何协作等,从而简化我们开发,让我们专注于业务逻辑开发。

3、非侵入式设计:从框架角度可以这样理解,无需继承框架提供的类,这种设计就可以看作是非侵入式设计,如果继承了这些框架类,就是侵入设计,如果以后想更换框架之前写过的代码几乎无法重用,如果非侵入式设计则之前写过的代码仍然可以继续使用。

4、轻量级及重量级:轻量级是相对于重量级而言的,轻量级一般就是非入侵性的、所依赖的东西非常少、资源占用非常少、部署简单等等,其实就是比较容易使用,而重量级正好相反。

5、POJO:POJO(Plain Old Java Objects)简单的Java对象,它可以包含业务逻辑或持久化逻辑,但不担当任何特殊角色且不继承或不实现任何其它Java框架的类或接口。

6、容器:在日常生活中容器就是一种盛放东西的器具,从程序设计角度看就是装对象的的对象,因为存在放入、拿出等操作,所以容器还要管理对象的生命周期。

7、控制反转:即Inversion of Control,缩写为IoC,控制反转还有一个名字叫做依赖注入(Dependency Injection),就是由容器控制程序之间的关系,而非传统实现中,由程序代码直接操控。

8、Bean一般指容器管理对象,在Spring中指Spring IoC容器管理对象。

二 为什么需要Spring及Spring的优点

●非常轻量级的容器:以集中的、自动化的方式进行应用程序对象创建和装配,负责对象创建和装配,管理对象生命周期,能组合成复杂的应用程序。Spring容器是非侵入式的(不需要依赖任何Spring特定类),而且完全采用POJOs进行开发,使应用程序更容易测试、更容易管理。而且核心JAR包非常小,Spring3.0.5不到1M,而且不需要依赖任何应用服务器,可以部署在任何环境(Java SE或Java EE)。

AOP:AOP是Aspect Oriented Programming的缩写,意思是面向切面编程,提供从另一个角度来考虑程序结构以完善面向对象编程(相对于OOP),即可以通过在编译期间、装载期间或运行期间实现在不修改源代码的情况下给程序动态添加功能的一种技术。通俗点说就是把可重用的功能提取出来,然后将这些通用功能在合适的时候织入到应用程序中;比如安全,日记记录,这些都是通用的功能,我们可以把它们提取出来,然后在程序执行的合适地方织入这些代码并执行它们,从而完成需要的功能并复用了这些功能。

● 简单的数据库事务管理:在使用数据库的应用程序当中,自己管理数据库事务是一项很让人头疼的事,而且很容易出现错误,Spring支持可插入的事务管理支持,而且无需JEE环境支持,通过Spring管理事务可以把我们从事务管理中解放出来来专注业务逻辑。

JDBC抽象及ORM框架支持:Spring使JDBC更加容易使用;提供DAO(数据访问对象)支持,非常方便集成第三方ORM框架,比如Hibernate等;并且完全支持Spring事务和使用Spring提供的一致的异常体系。

灵活的Web层支持:Spring本身提供一套非常强大的MVC框架,而且可以非常容易的与第三方MVC框架集成,比如Struts等。

简化各种技术集成:提供对Java Mail、任务调度、JMX、JMS、JNDI、EJB、动态语言、远程访问、Web Service等的集成。

Spring能帮助我们简化应用程序开发,帮助我们创建和组装对象,为我们管理事务,简单的MVC框架,可以把Spring看作是一个超级粘合平台,能把很多技术整合在一起,形成一个整体,使系统结构更优良、性能更出众,从而加速我们程序开发,有如上优点,我们没有理由不考虑使用它。

1.1.4  如何学好Spring

要学好Spring,首先要明确Spring是个什么东西,能帮我们做些什么事情,知道了这些然后做个简单的例子,这样就基本知道怎么使用Spring了。Spring核心是IoC容器,所以一定要透彻理解什么是IoC容器,以及如何配置及使用容器,其他所有技术都是基于容器实现的;理解好IoC后,接下来是面向切面编程,首先还是明确概念,基本配置,最后是实现原理,接下来就是数据库事务管理,其实Spring管理事务是通过面向切面编程实现的,所以基础很重要,IoC容器和面向切面编程搞定后,其余都是基于这俩东西的实现,学起来就更加轻松了。要学好Spring不能急,一定要把基础打牢,基础牢固了,这就是磨刀不误砍柴工。

1.2  Spring基础

1.2.1  Spring架构图

图 1-1 Spring架构图

核心容器:包括Core、Beans、Context、EL模块。

Core模块:封装了框架依赖的最底层部分,包括资源访问、类型转换及一些常用工具类。

Beans模块:提供了框架的基础部分,包括反转控制和依赖注入。其中Bean Factory是容器核心,本质是“工厂设计模式”的实现,而且无需编程实现“单例设计模式”,单例完全由容器控制,而且提倡面向接口编程,而非面向实现编程;所有应用程序对象及对象间关系由框架管理,从而真正把你从程序逻辑中把维护对象之间的依赖关系提取出来,所有这些依赖关系都由BeanFactory来维护。

●Context模块:以Core和Beans为基础,集成Beans模块功能并添加资源绑定、数据验证、国际化Java EE支持、容器生命周期、事件传播等;核心接口是ApplicationContext。

●EL模块:提供强大的表达式语言支持,支持访问和修改属性值,方法调用,支持访问及修改数组、容器和索引器,命名变量,支持算数和逻辑运算,支持从Spring 容器获取Bean,它也支持列表投影、选择和一般的列表聚合等。

AOP、Aspects模块:

AOP模块:Spring AOP模块提供了符合 AOP Alliance规范的面向方面的编程(aspect-oriented programming)实现,提供比如日志记录、权限控制、性能统计等通用功能和业务逻辑分离的技术,并且能动态的把这些功能添加到需要的代码中;这样各专其职,降低业务逻辑和通用功能的耦合。

Aspects模块:提供了对AspectJ的集成,AspectJ提供了比Spring ASP更强大的功能。

数据访问/集成模块:该模块包括了JDBC、ORM、OXM、JMS和事务管理。

●事务模块:该模块用于Spring管理事务,只要是Spring管理对象都能得到Spring管理事务的好处,无需在代码中进行事务控制了,而且支持编程和声明性的事物管理。

●JDBC模块:提供了一个JBDC的样例模板,使用这些模板能消除传统冗长的JDBC编码还有必须的事务控制,而且能享受到Spring管理事务的好处。

●ORM模块:提供与流行的“对象-关系”映射框架的无缝集成,包括Hibernate、JPA、Ibatiss等。而且可以使用Spring事务管理,无需额外控制事务。

●OXM模块:提供了一个对Object/XML映射实现,将java对象映射成XML数据,或者将XML数据映射成java对象,Object/XML映射实现包括JAXB、Castor、XMLBeans和XStream。

●JMS模块:用于JMS(Java Messaging Service),提供一套 “消息生产者、消息消费者”模板用于更加简单的使用JMS,JMS用于用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。

●Web/Remoting模块:Web/Remoting模块包含了Web、Web-Servlet、Web-Struts、Web-Porlet模块。

●Web模块:提供了基础的web功能。例如多文件上传、集成IoC容器、远程过程访问(RMI、Hessian、Burlap)以及Web Service支持,并提供一个RestTemplate类来提供方便的Restful services访问。

●Web-Servlet模块:提供了一个Spring MVC Web框架实现。Spring MVC框架提供了基于注解的请求资源注入、更简单的数据绑定、数据验证等及一套非常易用的JSP标签,完全无缝与Spring其他技术协作。

●Web-Struts模块:提供了与Struts无缝集成,Struts1.x 和Struts2.x都支持

Test模块: Spring支持Junit和TestNG测试框架,而且还额外提供了一些基于Spring的测试功能,比如在测试Web框架时,模拟Http请求的功能。

1.2.2     典型应用场景

Spring可以应用到许多场景,从最简单的标准Java SE程序到企业级应用程序都能使用Spring来构建。以下介绍几个比较流行的应用场景:

典型Web应用程序应用场景:

图1-2 web应用程序应用场景

在Web应用程序应用场景中,典型的三层架构:数据模型层实现域对象;数据访问层实现数据访问;逻辑层实现业务逻辑;web层提供页面展示;所有这些层组件都由Spring进行管理,享受到Spring事务管理、AOP等好处,而且请求唯一入口就是DispachterServlet,它通过把请求映射为相应web层组件来实现相应请求功能。

远程访问应用场景:

Spring能非常方便的提供暴露RMI服务,远程访问服务如Hessian、Burlap等,实现非常简单只需通过在Spring中配置相应的地址及需要暴露的服务即可轻松实现,后边会有介绍;

EJB应用场景:

Spring也可以与EJB轻松集成,后边会详细介绍。

时间: 2024-11-06 09:34:21

【第一章】 Spring概述 ——跟我学Spring3的相关文章

第一章:Http概述

第一章:Http概述 引言 web浏览器.服务器和相关的web应用程序都是通过http相互通信的,http是现代全球英特网中使用的公共语言. 本章主要内容 1.web客户端与服务器是如何通信的 2.资源(表示web内容)来自何方 3.web事务(请求与响应)是怎样工作的 4.http通信所使用的报文(请求报文/响应报文) 5.底层TCP网络协议 6.不同的http协议变体 1.2web客户端与服务器 web内容都是存储在web服务器上的.web服务器所使用的是http协议,因此也经常称web服务

Laxcus大数据管理系统(2)- 第一章 基础概述 1.1 基于现状的一些思考

第一章 基础概述 1.1 基于现状的一些思考 在过去十几年里,随着互联网产业的普及和高速发展,各种格式的互联网数据也呈现爆炸性增长之势.与此同时,在数据应用的另一个重要领域:商业和科学计算,在各种新兴技术和产业需求的推动下,对数据存储和计算要求也日益提高,并且对计算数据的准确性和精度也远高于互联网数据.而在这些现象的背后,当前的数据计算早已经突破MB量级,GB成为常态,TB变得流行,正在向PB迈进的时候,面对如此庞大的数据量,如果管理和使用它们,满足各种计算需求,发现和筛选其中有价值的信息,通常

第一章 HTML5 概述

这是一本关于 HTML5 编程的书.不过在学习之前,有必要先了解一下背景知识,什么是 HTML5?它经历了怎样的发展历程?HTML4 和 HTML5 有什么区别?本章中,我们会集中讨论大家关注的一些实际问题.为什么是 HTML5?为什么它能掀起风潮?是什么设计理念使得 HTML5 真正具有革命性的进步?HTML5 如何在大幅改动的同时保持高度兼容?无插件范式意味着什么?HTML5 包含什么,不包含什么?HTML5 新增加了哪些特性,为什么能揭开整个 Web 开发新时代的序幕?下面我们一起来了解一

学习笔记:第一章——计算机网络概述

学习笔记:第一章--计算机网络概述 1.0 计算机网络的定义:一些互相连接的,自治的计算机的集合称为计算机网路. 1.1 计算机网络在信息时代中的作用:连通和共享. 1.2 因特网概述:       网络的概念:网络(network)是由若干个结点(node)和连接这些结点的链路(link)组成. 网络中的结点可以是计算机,集线器,交换机和路由器: 网络和网络是通过路由器连接: 因特网是世界上最大的网络. 1.3 因特网的组成: 从因特网的工作方式上将其分为以下两大快: (1)边缘部分:由所有的

[OpenGL红宝书]第一章 OpenGL概述

第一章 OpenGL概述 标签(空格分隔): OpenGL 第一章 OpenGL概述 1 什么是OpenGL 2 初识OpenGL程序 3 OpenGL语法 4 OpenGL渲染管线 41 准备向OpenGL传输数据 42 将传输数据到OpenGL 43 顶点着色 44 细分着色 45 几何着色 46 图元装配 47 剪切 48 光栅化 49 片元着色 410 逐片元的操作 5 第一个程序深入分析 51 进入main函数 52 OpenGL的初始化过程 初始化顶点数组对象 分配顶点缓存对象 将数

编译技术图示(第一章 编译概述)

编译技术图示(第一章 编译概述) 源程序——>机器代码 分析(前端):分成小部分,找出小部分属性,包括:词法分析.语法分析.语义分析.中间代码生成 合成(后端),包括:中间代码优化.目标代码生成.目标代码优化 1.词法分析:识别.删除单词符号.词法检查 输入:源代码,输出:二元式<单词类别,单词属性> 2.语法分析 输出:抽象语法树(AST),从下向上看 3.语义分析 有限,大部分都是类型(运算)检查 4.中间代码生成 eg:x=a+b —> t1=a+b x=t1 为什么分为两个

(连载)边喝咖啡边学Unity——第一章 Unity概述

作为本书的第一句正文,在这个醒目的位置再次想告诉大家,我的想法是大家把这本书当做一本闲书来读,同时也希望启发读者,因此目录结构只保留章节,不会再细分.重要的概念会特殊地提出来. 本章其实应该是枯燥无味的,对于Unity已经有所了解的读者可以自行跳过.鉴于本书的完整性不得不废话一章.         Unity是什么? 首先读者需要清楚地知道,Unity是一种工具或者说软件,至目前成书之时已退出5.0版本.也可以说Unity是一款优秀的3D游戏引擎,其对于底层图形接口的封装为开发者省了不少事,极大

第一章 计算机网络概述

计算机网络原理精讲视频教程 第1章 计算机网络概述 局域网 覆盖范围小 自己花钱购买设备 带宽固定 自己维护 100米 带宽 10M 100M 1000M 广域网 距离远 花钱租带宽 Internet ISP 自己的机房 对网民提供访问Internet连接 理解OSI参考模型分层       第一层 应用层  (所有能产生网络流量的程序)       第二层 表示层  (数据在传送前是否进行 加密 .压缩 或 ACS码(文档类型) /二进制(图片) ,编码格式(显示乱码问题))       第三

第一章 Pyhthon概述

第一章 Python概述 Python语言是一种解释型.面向对象的计算机程序设计语言.Pyhon语言广泛应用与计算机程序设计教学语言.系统管理编程脚本语言.科学计算等,特别适用于快速的应用程序开发. 1.1 Python语言概述 1.1.1 Python语言简介 Python语言是一种解释型.面向对象的编程语言. 1989年底,吉多·范罗苏姆发明,广泛应用于处理系统管理任务和科学计算. Python是一个开源语言,拥有大量的库,可以高效地开发各种应用程序. 1.1.2 Python语言的特点 简