通过代码实例跟我学Spring框架从入门到精通——Spring框架应用技术

通过代码实例跟我学Spring框架从入门到精通——Spring框架应用技术
通过代码实例跟我学Spring框架从入门到精通——Spring框架应用技术

1.1通过代码实例跟我学Spring框架从入门到精通——Spring框架应用技术

1、Rod Johnson 的《Expert One-on-One J2EE Design and Development》

(1)Spring的起源

Spring起源于Rod Johnson的《Expert One-on-One J2EE Design and Development》,此书已经由电子工业出版社出版,译版名为《J2EE设计开发编程指南》。同时一个新的Java Framework 发布,同样出自Rod Johnson 的手笔----这就是SpringFramework。

他在书中大批横批了EJB(2.0 版本的)的种种弊端后,忍无可忍的提出了自己的基于实用主义的业务层框架,并把它开源后放到互联网上发表,这就是后来的Spring 框架。

(2)Spring框架的产生

SpringFramework 实际上是Expert One-on-One J2EE Design and Development 一书中所阐述的设计思想的具体实现。在One-on-One 一书中,RodJohnson 倡导J2EE 实用主义的设计思想,并随书提供了一个初步的开发框架实现(interface21 开发包)。

而SpringFramework 正是这一思想的更全面和具体的体现。

(3)Spring框架的设计者---- Rod Johnson

Rod Johnson 在interface21 开发包的基础之上,进行了进一步的改造和扩充,使其发展为一个更加开放、清晰、全面、高效的开发框架。

Rod Johnson一开始的Spring 把自己的核心集中于IOC(控制反转,其实就是用反射的方式调用get 和set 方法)方面,后来胃口逐渐的膨大,加入了很多新的模块,例如DAO,AOP,ORM,Web 等等,把注意力逐渐的转移到整合现有的框架方面,所以有时候它也被称为“万能胶水”,意为没有什么是Spring做不到的。

如今SpringFramework是最流行的轻量级Java IoC容器。Rod本人也是Servlet2.4和JDO2.0专家委员会成员,他同时也是一位经验丰富的技术咨询专家。Rod开了一家咨询公司,提供SpringFramework的技术支持和培训。

(4)Spring框架属于应用层的框架

它提供的是一种“对象管理”的技术(包括生命周期和依赖关系、缓存等)。

2、为什么要提供Spring框架

Spring的目标是实现一个全方位的整合框架,在Spring框架下实现多个子框架的组合,这些子框架之间彼此可以独立,也可以使用其它的框架方案加以替代----Spring框架在设计上可以独立构建应用或者结合已有的框架一起构建应用。Spring希望提供one-stop shop 的框架整合方案。

(1)面向系统设计者:达到“松藕合”的系统设计目标

由于J2EE平台的复杂性、低性能和可测试性低等等;任何Java系统开发都能从Spring 的简单、可测试和松耦合特征中受益。

(2)面向系统实现者:简化J2EE平台中的应用实现技术

使J2EE简单和易用;促进良好的编程习惯。

3、传统的J2EE系统在应用中所面临的问题

(1)J2EE技术的发展回顾

J2EE技术平台的标准化的特性大大地提升了企业级软件的开放程度,并且得到了整个行业和开发者的广泛认可。然而,J2EE在一些应用方面开始出现捉襟见肘-----低效、复杂以及依赖容器等导致应用系统的开发的成本比较高。

(2)J2EE技术平台(EJB)的主要问题

1)由于要采用多层结构,因此如果系统设计不良时将导致实现代码复杂,并且无法控

制。

2)可选择的技术实现范围太多,而导致开发者在学习方面的成本比较高,无法使初学

者快速上手。

3)目前J2EE标准技术只注重中大型系统,小型系统市场被忽视,可伸缩的小中型系

统不容易开发。

因此,合理并正确地应用J2EE技术平台来开发并不是件轻松的事情,因为我们在应用某些具体的技术时需要仔细考虑!

1)比如在多层架构的系统中我们需要考虑怎样建立用户界面的接口?

2)在哪里处理业务逻辑?怎样持久化数据?

3)系统的安全问题如何实现?

4)再比如在各个层中应该使用什么技术?

5)怎样的系统设计既能松散耦合还能灵活改变?----从而达到如果替换某个层而不影

响整体构架?

6)应用系统中如何实现事务处理、并发控制等等。

(3)但拒绝使用EJB并不意味着拒绝J2EE平台中一些良好的思想和解决方案在J2EE遭遇失败的场景中,EJB通常都扮演着重要的角色。因此,J2EE社群不断地向着

1)更简单的解决方案

2)更少地使用EJB

3)向轻量级平台等方向发展。

但我们所要明确的是,拒绝使用EJB并不意味着拒绝J2EE平台中一些良好的解决方案------比如,对象的生命周期管理、容器提供基础服务(分离应用组件和基础服务组件的思想)等。

因为,每个企业应用系统都需要这些基础服务。问题是,我们如何利用现有的框架来提供这些基础服务呢,伴随着这个问题的提出,一个轻量级的J2EE解决方案出现了,这就是Spring框架----能否在轻量级平台中应用EJB中的核心技术?

4、利用Spring IoC和AOP实现J2EE平台中的EJB主要技术

Spring是一个轻量级的控制反转技术(IoC)和面向切面编程(AOP)技术的容器框架。Spring又是如何实现的呢?

(1)标准J2EE技术平台中的主要的核心思想

1)容器实现对象的生命周期管理

2)分离应用逻辑组件和通用服务组件

3)应用服务器容器可以管理各个组件的事务并可以跨组件的隔离(如EJB CMT特

性)

(2)利用Spring IoC实现J2EE平台中所倡导的由容器实现对象的生命周期管理

1)Spring IoC,借助于依赖注入设计模式,使得开发者不再需要自己来管理对象自身

的生命周期及其关系,而且能够改善开发者对J2EE和GOF中的各种模式的应用;

2)并且Spring IoC所要求的JavaBean为普通的POJO,而不象EJB那样的必须实现某

个接口的要求

从而达到轻量级的实现目标。

(3)利用Spring AOP实现J2EE平台中所倡导的分离应用逻辑组件和通用服务组件

1)Spring AOP,从而达到类似“容器”提供基础功能服务的目标。

2)借助于Spring AOP中所提供的拦截器技术,开发者能够实现以声明的方式使用企

业级服务---比如安全性服务、事务服务等。

(4)Spring IoC和Spring AOP组合在一起形成了Spring

1)这样的一个有机整合,使得构建轻量级的J2EE平台的企业级的系统架构成为可能,

而且事实证明,非常有效。

2)没有Spring IoC的Spring AOP是不完善的,没有Spring AOP的Spring IoC是不健

壮的(Spring =IoC + AOP)。

5、使用Spring的主要的优点----“解耦”和“脱离容器”

(1)Spring框架的核心思想我们可以用两个字来描述,那就是“解耦”。具体体现如下应用系统中的各个部分之间(包括应用系统的核心类代码之间和应用系统与所在的框架平台之间)尽量形成一种松耦合的结构,使得应用系统有更多的灵活性;应用系统与其所在的底层应用服务器平台的解耦。

(2)在Spring中是如何实现上面的两种形式的解耦

应用系统内部的类之间的解耦主要通过一种称为控制反转(IOC)的技术来实现;应用系统与底层应用服务器平台的解耦借助AOP技术来实现,Spring内置的AOP支持使得一些本来必须由容器支持的功能,比如事务控制可以脱离开容器运行。

(3)使用Spring后系统主要的优点体现

1)利用其对象“延时依赖注入”思想组装代码,这样一方面减少了在使用这些对象的

客户中的大量代码,另一方面也提高系统扩展性,灵活性,实现插件式编程;

2)利用AOP思想达到集中处理业务逻辑并分离附加技术支持代码,从而减少重复代

码,构建优雅解决方案;

3)利用其对其它框架的支持比如Hibernate的SessionFactory、事务管理的封装,更简

洁地应用和集成Hibernate等O/R Mapping框架和其它的框架技术(如Struts等)。(4)如果我们不用Spring,将额外需要写很多代码!

同时,跟Spring提供的功能相比效果又怎样?比如事务处理、JDBC数据库访问等实现。可能会出现“花了精力但又效果不好”局面。

6、Spring 中的IoC

(1)IoC = Inversion of Control(将原来由程序控制“对象之间的关系”转由容器来实现控制)

IoC:用白话来讲,就是由容器来控制程序中的各个类之间的关系,而非传统实现中直接在代码中由程序代码直接操控。

这也就是所谓“控制反转”的概念所在:控制权由应用代码中转到了外部容器,控制权的转移,是所谓反转。利用“控制反转”能够减少对象的请求者对服务提供者的特定实现逻辑的依赖,因为我们的组件类不需要去查找或是实例化它们所依赖的其它的组件类。(2)IOC 是一种使应用程序逻辑外在化的设计模式

因为提供服务的组件是被“注入”的而不是被“直接写入”到请求者(客户端)的代码中;这样将能够大大地减少对象的请求者对服务提供者的特定实现逻辑的依赖----因为我们已经将依赖的具体“定位信息”从请求者中分离出来。

(3)我们在应用IoC进行系统开发的基本要求

在代码中不直接创建目标对象,但是描述创建它们的方式。在代码中不直接与服务对象连接,但在配置文件中描述哪一个组件需要哪一项服务。程序在运行时,由容器(在Spring 框架中是 IOC 容器)负责将这些对象关联在一起。

(4)代码示例

"https://www.360docs.net/doc/a614619361.html,/dtd/spring-beans-2.0.dtd">

class="com.px1987.springexample.springj2seapp.UpperTrnsferAction">

HeLLo,UpperAction

HeLLo,LowerAction

(5)IoC在应用开发中的体现

IoC的抽象概念是“依赖关系的转移”,我们在实际应用中常常提及的下面的各个依赖倒置(DIP)原则其实都是IoC在应用开发中的体现。

1)“高层模块组件不应该依赖低层模块组件,而是模块组件都必须依赖于抽象”是

IoC的一种表现

2)“实现必须依赖抽象,而不是抽象依赖实现”也是IoC的一种表现

3)“应用程序不应依赖于容器,而是容器服务于应用程序”也是IoC的一种表现。7、Spring 中的依赖注入

(1)DI = Dependency Injection,对IoC的另一种描述

正在业界为IoC争吵不休时,大师级人物Martin Fowler也站出来发话,以一篇经典文章《Inversion

of Control Containers and the Dependency Injection pattern》为IoC正名,至此,IoC又获得了

一个新的名字:“依赖注入(Dependency Injection)”。

Dependency Injection模式是依赖注射的意思,也就是将依赖关系先剥离(解藕),然后在适当时候再注射到目标系统中。

(2)何谓依赖注入

相对IoC 而言,“依赖注入”更加准确地描述了IoC的设计理念。从名字上理解,所谓依赖注入,即组件之间的依赖关系由容器在运行期决定----也就是由容器动态的将某种依赖关系注入到目标组件之中。

讲的通俗点,就是在运行期,由Spring根据配置文件,将其他对象的引用通过组件的提供的setter方法或者构造方法等进行设定。

(3)IoC和DI的本质:改变依赖关系

组件和组件的之间的关系的依赖由原来的依赖“目标组件”改变为现在的依赖于“容器”。为什么要进行改变?有什么意义?

1)为什么不应该直接依赖“目标组件”

依赖是客观存在的,问题是应该依赖谁? 主要是由于目标组件随着需求的变化而经常改变,我们捕希望在应用系统中由于某个“方面”发生改变而相关联的组件也必须跟着改变---分层的目的也就是能够达到良好的隔离。

2)哪又为什么可以依赖于“容器(Spring框架)”

由于容器相对于应用系统而言应该是相对的稳定的,不会频繁地发生改变----将“可变”和“不变”分离

8、图解“依赖注入”(摘录网上资料)

(1)IT人员的标准“行头”

上面是我们常用的工作装备,笔记本电脑一台、USB硬盘和U盘各一只。想必大家在日常工作中也有类似的一套行头。这与依赖注入有什么关系?

(2)图解“依赖注入”---在运行时由容器将依赖关系注入到组件中

图中三个设备都有一个共同点,都支持USB 接口。当我们需要将数据复制到外围存储设备时,可以根据情况,选择是保存在U盘还是USB硬盘,下面的操作大家也都轻车熟路,无非接通USB接口,然后在资源浏览器中将选定的文件拖放到指定的盘符。

这样的操作在过去几年中每天都在我们身边发生,而这也正是所谓依赖注入的一个典型案例,再看上例中,笔记本电脑与外围存储设备通过预先指定的一个接口(USB)相连,对于笔记本而言,只是将用户指定的数据发送到USB接口,而这些数据何去何从,则由当前接入的USB设备决定。

在USB设备加载之前,笔记本不可能预料用户将在USB接口上接入何种设备,只有USB 设备接入之后,这种设备之间的依赖关系才开始形成。

对应上面关于依赖注入机制的描述,在运行时(系统开机,USB 设备加载)由容器(运行在笔记本中的Windows操作系统)将依赖关系(笔记本依赖USB设备进行数据存取)注入到组件中(Windows文件访问组件)。这就是依赖注入模式在现实世界中的一个版本。

9、在Spring中为什么要提供“依赖注入”设计理念

(1)应用的目的

我们一直在提倡“组件重用”,但又如何达到以及实现的具体方法?依赖注入的目标并非为软件系统带来更多的功能,应用它的目的是为了提升“组件重用”的概率,同时也为系统搭建一个灵活、可扩展的平台----安全性、稳定性、可扩展性和可移植性是企业系统的追求目标。

(2)产生的效果---在系统架构方面

提高了组件的可移植性和可重用度,因为依赖注入机制减轻了组件之间的依赖关系—--这也是J2EE平台倡导“松藕合”的系统开发要求。

(3)产生的效果---在系统实现方面

能够更简洁的编程实现,请见文档中的示例说明,可以帮助我们理解其中的含义。

很多初学者常常陷入“依赖注入,何用之有?”的疑惑。想来前面和下面的例子可以帮助大家简单的理解其中的含义。

回顾前面“在JBUilder 中创建Spring的J2SE的应用”一文中的示例,UpperAction/LowerAction类在运行前,其messageProperty节点为空。运行后由容器将字符串“HeLLo,LowerAction”注入。此时UpperAction/LowerAction即与内存中的“HeLLo,LowerAction”字符串对象建立了依赖关系。

也许区区一个字符串我们无法感受出依赖关系的存在。如果把这里的Message 属性换

成一个数据源(DataSource),可能更有感觉。请看下面的示例:

java:/comp/env/jdbc/testDB

其中DAOBean(假设DAOBean是一个运行在J2EE容器中的组件---如Weblogic或者Tomcat等)中的dataSource将由容器在运行期动态注入,而DataSource的具体配置和初始化工作也将由容器在运行期完成。

对比传统的实现方式(如通过编码初始化DataSource实例),我们可以看到,基于依赖注入的系统实现相当灵活简洁。

(4)上面的示例所反映出的效果

通过依赖注入机制,我们只需要通过简单的配置,而无需任何代码就可指定DAOBean 中所需的DataSource实例。DAOBean只需利用容器注入的DataSource实例,完成自身的业务逻辑,而不用关心具体的资源来自何处、由谁实现。

1)提高了组件的可移植性和可重用度

假设我们的部署环境发生了变化,系统需要脱离应用服务器独立运行,这样,由于失去了容器的支持,原本通过JNDI获取DataSource的方式不再有效(因为,现在则需要改变为由某个组件直接提供DataSource)。

我们需要如何修改以适应新的系统环境?很简单,我们只需要修改dataSource的配置:

com.microsoft.jdbc.sqlserver.SQLServerDriver

jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=WebStudyDB

sa

1234

这里我们的DataSource改为由Apache DBCP组件提供。没有编写任何代码我们即实现了DataSource的切换。

2)依赖注入机制减轻了组件之间的依赖关系

回想传统编码模式中,如果要进行同样的修改,我们需要付出多大的努力。因此,依赖注入机制减轻了组件之间的依赖关系,同时也大大提高了组件的可移植性,这意味着,组件得到重用的机会将会更多。

10、对IoC的另一种解释示例---生活中找“对象”(摘录网上资料)

(1)控制倒(反)转

1)常规的方式---自己恋爱

举个简单的例子,我们是如何找女朋友的?常见的情况是,我们到处去看哪里有长得漂亮身材又好的mm,然后打听她们的兴趣爱好、qq号、电话号、ip号、iq号………,想

办法认识她们,投其所好送其所要,然后嘿嘿……这个过程是复杂深奥的,我们必须自己设计和面对每个环节。传统的程序开发也是如此,在一个对象中,如果要使用另外的对象,就必须得到它(自己new一个,或者从JNDI中查询一个),使用完之后还要将对象销毁(比如Connection等),对象始终会和其他的接口或类藕合起来。

2)借助于婚介找女朋友

那么IoC是如何做的呢?有点像通过婚介找女朋友,在我和女朋友之间引入了一个第三者:婚姻介绍所。婚介管理了很多男男女女的资料,我可以向婚介提出一个列表,告诉它我想找个什么样的女朋友,比如长得像李嘉欣,身材像林熙雷,唱歌像周杰伦,速度像卡洛斯,技术像齐达内之类的,然后婚介就会按照我们的要求,提供一个mm,我们只需要去和她谈恋爱、结婚就行了。简单明了,如果婚介给我们的人选不符合要求,我们就会抛出异常。整个过程不再由我自己控制,而是有婚介这样一个类似容器的机构来控制。(2)Spring所倡导的开发方式---由容器帮助我们管理对象的生命周期和关系1)我们只需要将对象在Spring中进行登记

Spring所倡导的开发方式就是如此,所有的类都会在Spring容器中登记,告诉Spring 你是个什么东西,你需要什么东西,然后Spring会在系统运行到适当的时候,把你要的东西主动给你,同时也把你交给其他需要你的东西。

2)所有的类的创建、销毁都由Spring来控制

所有的类的创建、销毁都由Spring来控制,也就是说控制对象生存周期的不再是引用它的对象,而是Spring。对于某个具体的对象而言,以前是它控制其他对象,现在是所有对象都被Spring控制,所以这叫控制反转。

11、如何实现依赖注入----通过reflection来实现DI

(1)Java中提供了对反射(reflection)技术的支持

那么DI是如何实现的呢?Java 1.3之后一个重要特征是反射(reflection),它允许程序在运行的时候动态的生成对象、执行对象的方法、改变对象的属性。

(2)Spring是通过反射技术来实现注入的

(3)示例代码

下面的示例代码可以从配置文件中获得某个组件对象,并且动态地给该组件的message 属性赋值。

Properties pro = new Properties();

pro.load(new FileInputStream("config.properties"));

String actionImplName = (String)pro.get(actionBeanName);

String actionMessageProperty = (String)pro.get(actionMessagePropertyName);

Object obj = Class.forName(actionImplName).newInstance();

//BeanUtils是Apache Commons BeanUtils提供的辅助类

BeanUtils.setProperty(obj,"message", actionMessageProperty);

return (Action)obj;

12、SpringFramework中文论坛https://www.360docs.net/doc/a614619361.html,/index.php

13、同样具有与Spring DI相同功能的其它框架

世界上有很多开源项目,因此当我们发现Spring并非唯一的提供依赖注入功能,或者全功能的端对端应用程序构建方案的框架。实际上,总是有太多的项目需要关注。

本着开放的精神,我们简短地介绍其中的几个,但是我们相信其中没有一个能提供Spring中那么丰富的解决方案。

(1)PicoContainer

PicoContainer (https://www.360docs.net/doc/a614619361.html,)是一个特别小(50K)的DI容器,允许我们在除了PicoContainer本身外,不添加任何其他依赖的情况下就使用DI。因为PicoContainer就是单纯的DI容器,我们会发现随着我们的应用增大,我们你需要引入另外一个框架,比如Spring,那么如果一开始就用Spring岂不是更好。

但是,假若我们需要的是一个微型的DI容器,PicoContainer是一个好选择,但因为Spring 的DI容器包和框架中的其他部分是分离的,我们也可以很容易地只使用这一部分,这样为日后的灵活性留下了余地。

(2)NanoContainer

NanoContainer(https://www.360docs.net/doc/a614619361.html,)是PicoContainer的扩张,用于管理独立的PicoContinaer树。因为Spring提供了所有的标准DI容器具有的相同的功能,NanoContainer 对比Spring占不到大的便宜。NanoContainer因为它对脚本语言的支持,它可以和容器交互,这很有趣。

但是在不久的将来,在Spring中也可以看到这个功能。

(3)Keel Framework

Keel Framework (https://www.360docs.net/doc/a614619361.html,)更像是一个元框架,它的大多数功能都是从其他框架借用的,容纳于一个屋檐下。比如,DI功能从Apache Avalon容器中来,web功能从Struts或类似框架中获得。

Keel对同一个元件有很多实现,把它们胶合成同一个系统,允许我们在对应用程序改动最小的情况下替换元件。尽管其功能集很丰富,Keel看上去没能获得Spring那么高的接受度。我们只是简要地研究了Keel,我们觉得这种情况是因为操作难度的问题造成的。Spring 对各个层面的开发者都立即可用,但Keel显得更加复杂。虽然这么说,它的功能集令人印象深刻,依然是Spring的直接竞争者。

多图详解Spring框架的设计理念与设计模式

Spring作为现在最优秀的框架之一,已被广泛的使用,51CTO也曾经针对Spring框架中的JDBC应用做过报道。本文将从另外一个视角试图剖析出Spring框架的作者设计Spring框架的骨骼架构的设计理念。 Rod Johson在2002年编著的《Expert one to one J2EE design and development》一书中,对Java EE正统框架臃肿、低效、脱离现实的种种现状提出了质疑,并积极寻求探索革新之道。以此书为指导思想,他编写了interface21框架,这是一个力图冲破Java EE传统开发的困境,从实际需求出发,着眼于轻便、灵巧,易于开发、测试和部署的轻量级开发框架。Spring框架即以interface21框架为基础,经过重新设计,并不断丰富其内涵,于2004年3月24日,发布了1.0正式版。同年他又推出了一部堪称经典的力作《Expert one-to-one J2EE Development without EJB》,该书在Java世界掀起了轩然大波,不断改变着Java开发者程序设计和开发的思考方式。在该书中,作者根据自己多年丰富的实践经验,对EJB 的各种笨重臃肿的结构进行了逐一的分析和否定,并分别以简洁实用的方式替换之。至此一战功成,Rod Johnson 成为一个改变Java世界的大师级人物。 传统J2EE应用的开发效率低,应用服务器厂商对各种技术的支持并没有真正统一,导致J2EE的应用没有真正实现Write Once及Run Anywhere的承诺。Spring作为开源的中间件,独立于各种应用服务器,甚至无须应用服务器的支持,也能提供应用服务器的功能,如声明式事务等。 Spring致力于J2EE应用的各层的解决方案,而不是仅仅专注于某一层的方案。可以说Spring是企业应用开发的“一站式”选择,并贯穿表现层、业务层及持久层。然而,Spring并不想取代那些已有的框架,而与它们无缝地整合。 Spring简介 Spring是一个开源框架,它由Rod Johnson创建。它是为了解决企业应用开发的复杂性而创建的。Spring 使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。 ◆目的:解决企业应用开发的复杂性 ◆功能:使用基本的JavaBean代替EJB,并提供了更多的企业应用功能 ◆范围:任何Java应用 简单来说,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。 ◆轻量——从大小与开销两方面而言Spring都是轻量的。完整的Spring框架可以在一个大小只有1MB多的JAR文件里发布。并且 Spring所需的处理开销也是微不足道的。此外,Spring是非侵入式的:典型地,Spring应用中的对象不依赖于Spring的特定类。 ◆控制反转——Spring通过一种称作控制反转(IoC)的技术促进了松耦合。当应用了IoC,一个对象依赖的其它对象会通过被动的方式传递进来,而不是这个对象自己创建或者查找依赖对象。你可以认为IoC与JNDI相反——不是对象从容器中查找依赖,而是容器在对象初始化时不等对象请求就主动将依赖传递给它。 ◆面向切面——Spring提供了面向切面编程的丰富支持,允许通过分离应用的业务逻辑与系统级服务(例如审计(auditing)和事务()管理)进行内聚性的开发。应用对象只实现它们应该做的——完成业务逻辑——仅此而已。它们并不负责(甚至是意识)其它的系统级关注点,例如日志或事务支持。 ◆容器——Spring包含并管理应用对象的配置和生命周期,在这个意义上它是一种容器,你可以配置你的每个bean如何被创建——基于一个可配置原型(prototype),你的bean可以创建一个单独的实例或者每次需要时都生成一个新的实例——以及它们是如何相互关联的。然而,Spring不应该被混同于传统的重量级的EJB容器,它们经常是庞大与笨重的,难以使用。 ◆框架——Spring可以将简单的组件配置、组合成为复杂的应用。在Spring中,应用对象被声明式地组合,典型地是在一个XML文件里。Spring也提供了很多基础功能(事务管理、持久化框架集成等等),将

spring框架

spring框架 Spring是一个开源框架,它由Rod Johnson创建。它是为了解决企业应用开发的复杂性而创建的。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。 Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。 轻量——从大小与开销两方面而言Spring都是轻量的。完整的Spring框架可以在一个大小只有1MB多的JAR文件里发布。并且Spring所需的处理开销也是微不足道的。此外,Spring是非侵入式的:典型地,Spring应用中的对象不依赖于Spring的特定类。 控制反转——Spring通过一种称作控制反转(IoC)的技术促进了松耦合。当应用了IoC,一个对象依赖的其它对象会通过被动的方式传递进来,而不是这个对象自己创建或者查找依赖对象。你可以认为IoC与JNDI相反——不是对象从容器中查找依赖,而是容器在对象初始化时不等对象请求就主动将依赖传递给它。 面向切面——Spring提供了面向切面编程的丰富支持,允许通过分离应用的业务逻辑与系统级服务(例如审计(auditing)和事务(transaction)管理)进行内聚性的开发。应用对象只实现它们应

该做的——完成业务逻辑——仅此而已。它们并不负责(甚至是意识)其它的系统级关注点,例如日志或事务支持。 容器——Spring包含并管理应用对象的配置和生命周期,在这个意义上它是一种容器,你可以配置你的每个bean如何被创建——基于一个可配置原型(prototype),你的bean可以创建一个单独的实例或者每次需要时都生成一个新的实例——以及它们是如何相互关联的。然而,Spring不应该被混同于传统的重量级的EJB 容器,它们经常是庞大与笨重的,难以使用。 框架——Spring可以将简单的组件配置、组合成为复杂的应用。在Spring中,应用对象被声明式地组合,典型地是在一个XML文件里。Spring也提供了很多基础功能(事务管理、持久化框架集成等等),将应用逻辑的开发留给了你。 所有Spring的这些特征使你能够编写更干净、更可管理、并且更易于测试的代码。它们也为Spring中的各种模块提供了基础支持。

Spring技术内幕:深入解析Spring架构与设计原理

---------------------------------------------------------------最新资料推荐------------------------------------------------------ Spring技术内幕:深入解析Spring架构与设计原 理 Spring 技术内幕: 深入解析 Spring 架构与设计原理 Spring 技术内幕深入解析 Spring 架构与设计原理(一)引子缘起已经很久没有写帖子了,现在总算是有点时间写些东西,也算是对自己的一个记录吧。 刚刚完成了一个软件产品,从概念到运营都弄了一下,正在推广当中,虽然还没有能够达到盈亏平衡,但是这个过程,对自己也算是一种历练。 先不管结果如何,好呆走过这么一遭了。 我打算用这个帖子,把自己在这个过程中的一些心得,特别是对 Spring 新的理解,记录下来。 使用这个帖子的标题,持续下来。 简单来说,自己的软件产品是一个基于互联网的 SaaS 协同软件平台, 操作简单,支持流程定义,管理和多种客户端 -像短信, MSN,智能手机什么的(我这里就不多做什么广告了),也有一个企业版的版本,使用的技术框架是 Hibernate + Spring + Wicket,下面是 Linux 和 MySQL,还有云计算的平台的使用,以支持其扩展性,虽然现在还没有可扩展性的需求,但似乎不难从SaaS 上,就会想到云计算, 其实,它们真的是天生的一对! 1 / 3

关于云计算,自己对这个技术很感兴趣,觉得和开源软件的结合,是很有意思的,因为它们都有基于服务的基因,在云计算平台的使用上,也有一些初步的实践。 云计算是一个很有意思的话题,但在这里主要是想谈 Spring,所以对云计算,这里就先不多说了,但非常欢迎有兴趣的朋友和一起另外找地方讨论!回到正题,在我自己的产品中,其中除了Wicket 和云计算外,其他都是大家非常熟知的了,像Hibernate, Spring, MySQL 什么的。 在这个过程中,发现自己对一些技术点也有了新的认识,最有体会的是 Spring。 当然,在这个过程中,更大的收获是对产品开发整个过程的认识,在这点上,真是一言难尽. . . . . . . . 回到自己还算了解的 Spring, 这次我使用的是 3. 0 的代码,所以,有机会也把这些代码读了几遍,比原来的理解要加深了许多,也发现了不少和 2. 0 代码不同的地方,以及自己一些对 Spring 的新的理解,这些,就让我就用这个帖子系列,给自己总结一下,也算是对自己以前的那个代码分析的帖子做一个新的交代吧。 自己对 Spring 一点小小的见解简化 Java 企业应用的开发,是Spring 框架的目标. 就是我们熟知的当年的那个interface21,也亦非吴下阿蒙了,由它演进出来的 Spring,以及由它带来的崭新开发理念,也早已伴随着这个开源框架的广泛应用,而飞入寻常百姓家。

一个非常有趣的使用spring框架AOP例子

一个非常有趣的使用spring框架AOP例子 接触spring有一段时间了,不过都是看的多,写的少,工作忙,公司也不准备用。自己写过一些小东西用到,也只用到了BeanFactory组装对象,JdbcTemplate代替jdbc,事务管理。。。东抓一把,西抓一把,没形成系统。最近也在看spring自带的reference,一时手痒,写了个AOP的创建advice的例子,比之单纯地使用TransationProxyFactoryBean 对AOP的理解又深入了点,打算看看它的源代码,基于CGLIB的实现对类的代理不了解,倒是好奇它如何实现对接口的代理??也就是利用J2SE的动态代理技术。 例子如下:讲述一间书店开始打折促销,规则是每一名顾客只能买一本书,而且已经脱销了。。。。。你可以去掉TestAdvice里的注释看看各种运行结果,具体就不解释咯,在代码注释里。 首先,你必须对增强(advice)有所了解,增强就是在特定连接点执行的动作。advice contains the logic of your aspect。增强,分为4类: 前增强(before)在连接点之前调用 后增强(after)在连接点执行之后调用、 环绕增强(around)完整控制整个方法流程,必须调用MethodInvocation的proceed促使真实操作发生 异常增强针对某个异常抛出时调用 书店,一个buyBook业务: package com.denny_blue.springdemo.aop; public interface BuyBook { public void buyBook(String customer,String book)throws NoThisBookException; } 实现此接口的一个业务对象,如果顾客要买就抛出NoThisBookException异常。 package com.denny_blue.springdemo.aop; public class MyBuyBook implements BuyBook { public void buyBook(String customer,String book)throws NoThisBookException{ if(book.equals("")) throw new NoThisBookException("对不起,没有"+book+"存货了!"); System.out.println(customer+",你好,你已经购买了一本"+book+"!"); } }

java框架Spring2复习题

一、选择题(每题2分,共计100分) 1.下面关于AOP的说法错误的是()。 A.AOP将散落在系统中的“方面”代码集中实现 B.AOP有助于提高系统的可维护性 C.AOP已经表现出了将要替代面向对象的趋势 D.AOP是一种设计模式,Spring提供了一种实现 2.事务隔离级别是由谁实现的?()。 A.Java应用程序 B.Hibernate C.数据库系统 D.JDBC驱动程序 标准SQL规范: 在数据库操作中,为了有效保证并发读取数据的正确性,提出的事务隔离级别;为了解决更新丢失,脏读,不可重读(包括虚读和幻读)等问题在标准SQL规范中,定义了4个事务隔离级别,分别为未授权读取,也称为读未提交(read uncommitted);授权读取,也称为读提交(read committed);可重复读取(repeatable read);序列化(serializable). 3.下列哪项不是Spring的依赖注入方式()。[选两项] A.setter注入 B.getter注入 C.接口注入 D.构造注入 4.在Spring框架中,面向方面编程(AOP)的目标在于( )。 A.编写程序时不用关心其依赖组件的实现 B.将程序中涉及的公用问题集中解决 C.封装JDBC访训数据库的代码,简化数据访训层的得复性代码 D.实现面面的”无刷新”

A.Spring提供了HibernateDaoSupport类来简化Hibernate的使用 B.在Spring配置文件种可以通过Spring提供的LocalSessionFactoryBean,来获得SessionFactory的实例 C.通过集成Spring和Hibernate,用Spring管理程序的依赖关系,将SessionFactory 注入到DataSource中 D.通过Spring,可以在Biz层代码中无需直接实例化DAO类,而是通过注入得到 6.依赖注入说法正确的是()。 A.依赖注入的目标是在代码之外管理程序组建间的依赖关系 B.依赖注入即是“面向接口”的编程 C.依赖注入是面向对象技术的替代品 D.依赖注入的使用会增大程序的规模 7.关于spring说法错误的是()。 A.spring是一个轻量级JAVA EE的框架集合 B.spring是“依赖注入”模式的实现 C.使用spring可以实现声明事务 D.spring提供了AOP方式的日志系统8.在Spring 中,配置Hibernate 事务管理器(Hibernate TransactionManager)时,需要 注入的属性名称是( )。 A.dataSource B.sessionFactory C.baseHibernateDao D.transactionProxyFactoryBean 9.下面()不是Spring AOP中的通知类型。 A.前置通知 B.后置通知 C.代理通知 D.异常通知

各技术框架架构图

各种系统架构图及其简介 1.Spring 架构图 Spring 是一个开源框架,是为了解决企业应用程序开发复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许您选择使用哪一个组件,同时为J2EE 应用程序开发提供集成的框架。Spring 框架的功能可以用在任何J2EE 服务器中,大多数功能也适用于不受管理的环境。Spring 的核心要点是:支持不绑定到特定J2EE 服务的可重用业务和数据访问对象。这样的对象可以在不同J2EE 环境(Web或EJB )、独立应用程序、测试环境之间重用。 组成Spring 框架的每个模块(或组件)都可以单独存在,或者与其他一个或多个模块联合实现。每个模块的功能如下: ?核心容器:核心容器提供Spring 框架的基本功能。核心容器的主要组件是BeanFactory ,它是工厂模式的实现。BeanFactory 使用控制反转(IOC )模式将应用程序的配置和依赖性规范与实际的应用程序代码分开。 ?Spring 上下文:Spring 上下文是一个配置文件,向Spring 框架提供上下文信息。Spring 上下文包括企业服务,例如JNDI 、EJB 、电子邮件、国际化、校验和调度功能。 ?Spring AOP :通过配置管理特性,Spring AOP 模块直接将面向方面的编程功能集成到了Spring 框架中。所以,可以很容易地使Spring 框架管理的任何对象支持AOP 。Spring AOP 模块为基于Spring 的应用程序中的对象提供了事务管理服务。通过使用Spring AOP ,不用依赖EJB 组件,就可以将声明性事务管理集成到应用程序中。 ?Spring DAO :JDBC DAO 抽象层提供了有意义的异常层次结构,可用该结构来管理异常处理和不同数据库供应商抛出的错误消息。异常层次结构简化了错误处理,并且极大地降低了需要编写的异常代码数量(例如打开和关闭连接)。Spring DAO 的面向JDBC 的异常遵从通用的DAO 异常层次结构。 ?Spring ORM :Spring 框架插入了若干个ORM 框架,从而提供了ORM 的对象关系工具,其中包括JDO 、Hibernate 和iBatis SQL Map 。所有这些都遵从Spring 的通用事务和DAO 异常层次结构。

Spring中文开发详细手册

Spring开发教程 Spring教程 (1) Spring框架概述 (2) Spring是什么? (2) Spring的历史 (3) Spring的使命(Mission Statement) (3) Spring受到的批判 (3) Spring包含的模块 (4) 总结 (5) Spring的IoC容器 (6) 用户注册的例子 (6) 面向接口编程 (7) (用户持久化类)重构第一步——面向接口编程 (8) 重构第二步——工厂(Factory)模式 (9) 重构第三步——工厂(Factory)模式的改进 (9) 重构第四步-IoC容器 (10) 控制反转(IoC)/依赖注入(DI) (10) 什么是控制反转/依赖注入? (10) 依赖注入的三种实现形式 (11) BeanFactory (13) BeanFactory管理Bean(组件)的生命周期 (14) Bean的定义 (15) Bean的之前初始化 (19) Bean的准备就绪(Ready)状态 (21) Bean的销毁 (21) ApplicationContext (21) Spring的AOP框架 (21) Spring的数据层访问 (21) Spring的声明式事务 (21) Spring对其它企业应用支持 (22)

名词解释 容器: 框架: 框架 容器 组件: 服务: Spring框架概述 主要内容:介绍Spring的历史,Spring的概论和它的体系结构,重点阐述它在J2EE中扮演的角色。 目的:让学员全面的了解Spring框架,知道Spring框架所提供的功能,并能将Spring 框架和其它框架(WebWork/Struts、hibernate)区分开来。 Spring是什么? Spring是一个开源框架,它由Rod Johnson创建。它是为了解决企业应用开发的复杂性而创建的。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring 的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。 ?目的:解决企业应用开发的复杂性 ?功能:使用基本的JavaBean代替EJB,并提供了更多的企业应用功能 ?范围:任何Java应用 简单来说,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。 ■轻量——从大小与开销两方面而言Spring都是轻量的。完整的Spring框架可以在一个大小只有1MB多的JAR文件里发布。并且Spring所需的处理开销也是微不足道的。此外,Spring是非侵入式的:典型地,Spring应用中的对象不依赖于Spring的特定类。 ■控制反转——Spring通过一种称作控制反转(IoC)的技术促进了松耦合。当应用了IoC,一个对象依赖的其它对象会通过被动的方式传递进来,而不是这个对象自己创建或者查找依赖对象。你可以认为IoC与JNDI相反——不是对象从容器中查找依赖,而是容器在对象初始化时不等对象请求就主动将依赖传递给它。 ■面向切面——Spring提供了面向切面编程的丰富支持,允许通过分离应用的业务逻辑与系统级服务(例如审计(auditing)和事务()管理)进行内聚性的开发。应用对象只实

spring框架

由于软件开发的复杂性而创建了Spring框架。Spring使用基本的JavaBeans完成以前只能由EJB完成的事情。但是,Spring的使用不仅限于服务器端开发。从简单性,可测试性和松散耦合的角度来看,大多数Java应用程序都可以从Spring中受益。 ◆目的:解决企业应用开发的复杂性 ◆功能:使用基本的JavaBean代替EJB,并提供更多的企业应用程序功能 ◆范围:任何Java应用程序 Spring是控制(IoC)和面向方面(AOP)容器框架的轻量级反转。要谈Spring的历史,就要先谈J2EE。J2EE应用程序的广泛实现是在1999年和2000年开始的,它的出现带来了诸如事务管理之类的核心中间层概念的标准化,但是在实践中并没有获得绝对的成功,因为开发效率,开发难度和实际的性能都令人失望。 曾经使用过EJB开发JAVA EE应用的人,一定知道,在EJB开始的学习和应用非常的艰苦,很多东西都不能一下子就很容易的理解。EJB 要严格地实现各种不同类型的接口,类似的或者重复的代码大量存在。而配置也是复杂和单调,同样使用JNDI进行对象查找的代码也是单调而枯燥。虽然有一些开发工作随着xdoclet的出现,而有所缓解,但是学习EJB的高昂代价,和极低的开发效率,极高的资源消耗,都造成了EJB的使用困难。而Spring出现的初衷就是为了解决类似的这些问题。 Spring的一个最大的目的就是使JAVA EE开发更加容易。同时,

Spring之所以与Struts、Hibernate等单层框架不同,是因为Spring 致力于提供一个以统一的、高效的方式构造整个应用,并且可以将单层框架以最佳的组合揉和在一起建立一个连贯的体系。可以说Spring是一个提供了更完善开发环境的一个框架,可以为POJO(Plain Ordinary Java Object)对象提供企业级的服务。Spring的形成,最初来自Rod Jahnson所著的一本很有影响力的书籍《Expert One-on-One J2EE Design and Development》,就是在这本书中第一次出现了Spring的一些核心思想,该书出版于2002年。另外一本书《Expert One-on-One J2EE Development without EJB》,更进一步阐述了在不使用EJB开发JAVA EE企业级应用的一些设计思想和具体的做法。有时间了可以详细的研读一下。Spring的初衷: 1、JAVA EE开发应该更加简单。 2、使用接口而不是使用类,是更好的编程习惯。Spring将使用接口的复杂度几乎降低到了零。 3、为JavaBean提供了一个更好的应用配置框架。 4、更多地强调面向对象的设计,而不是现行的技术如JAVA EE。 5、尽量减少不必要的异常捕捉。 6、使应用程序更加容易测试。 Spring的目标: 1、可以令人方便愉快的使用Spring。 2、应用程序代码并不依赖于Spring APIs。

Spring框架研究与应用

学校代号10536 学号0810802539 分类号TP18 密级公开 硕士学位论文 Spring框架研究与应用 学位申请人姓名肖露 培养单位长沙理工大学 导师姓名及职称龙鹏飞教授 学科专业计算机软件与理论 研究方向软件工程 论文提交日期2011年5月

学校代号:10536 学号:0810802539 密级:公开 长沙理工大学硕士学位论文 Spring框架研究与应用 学位申请人姓名肖露 导师姓名及职称龙鹏飞教授 培养单位长沙理工大学 专业名称计算机软件与理论 论文提交日期2011年4月 论文答辩日期2011年5月 答辩委员会主席车生兵教授

Spring Framework Research and Application by Xiao Lu B.E.( HaiNan University) 2008 A thesis submitted in partial satisfaction of the Requirements for the degree of Master of Engineering in Computer Software and Theory in Changsha University of Science & Technology Supervisor Professor Long Pengfei March, 2011

长沙理工大学 学位论文原创性声明 本人郑重声明:所呈交的论文是本人在导师的指导下独立进行研究所取得的研究成果。除了文中特别加以标注引用的内容外,本论文不包含任何其他个人或集体已经发表或撰写的成果作品。对本文的研究做出重要贡献的个人和集体,均已在文中以明确方式标明。本人完全意识到本声明的法律后果由本人承担。 作者签名:日期:年月日 学位论文版权使用授权书 本学位论文作者完全了解学校有关保留、使用学位论文的规定,同意学校保留并向国家有关部门或机构送交论文的复印件和电子版,允许论文被查阅和借阅。本人授权长沙理工大学可以将本学位论文的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存和汇编本学位论文。 本学位论文属于 1、保密□,在______年解密后适用本授权书。 2 (请在以上相应方框内打“√”) 作者签名:日期:年月日 导师签名:日期:年月日

Spring技术内幕:深入解析Spring架构与设计原理

Spring技术内幕 深入解析Spring架构与设计原理(一)引子 缘起 已经很久没有写帖子了,现在总算是有点时间写些东西,也算是对自己的一个记录吧。刚刚完成了一个软件产品,从概念到运营都弄了一下,正在推广当中,虽然还没有能够达到盈亏平衡,但是这个过程,对自己也算是一种历练。先不管结果如何,好呆走过这么一遭了。 我打算用这个帖子,把自己在这个过程中的一些心得,特别是对Spring新的理解,记录下来。使用这个帖子的标题,持续下来。 简单来说,自己的软件产品是一个基于互联网的SaaS协同软件平台,操作简单,支持流程定义,管理和多种客户端 -像短信,MSN,智能手机什么的(我这里就不多做什么广告了),也有一个企业版的版本,使用的技术框架是Hibernate + Spring + Wicket,下面是Linux和MySQL,还有云计算的平台的使用,以支持 其扩展性,虽然现在还没有可扩展性的需求,但似乎不难从SaaS上,就会想到云计算, 其实,它们真的是天生的一对! 关于云计算,自己对这个技术很感兴趣,觉得和开源软件的结合,是很有意思的,因为它们都有基于服务的基因,在云计算平台的使用上,也有一些初步的实践。云计算是一个很有意思的话题,但在这里主要是想谈Spring,所以对云计算, 这里就先不多说了,但非常欢迎有兴趣的朋友和一起另外找地方讨论! 回到正题,在我自己的产品中,其中除了Wicket和云计算外,其他都是大家非常熟知的了,像Hibernate, Spring, MySQL什么的。在这个过程中,发现自己对一些技术点也有了新的认识,最有体会的是Spring。当然,在这个过程中, 更大的收获是对产品开发整个过程的认识,在这点上,真是一言难尽........ 回到自己还算了解的Spring, 这次我使用的是3.0的代码,所以,有机会也把 这些代码读了几遍,比原来的理解要加深了许多,也发现了不少和2.0代码不同的地方,以及自己一些对 Spring的新的理解,这些,就让我就用这个帖子系列,给自己总结一下,也算是对自己以前的那个代码分析的帖子做一个新的交代吧。 自己对Spring一点小小的见解 简化Java企业应用的开发,是Spring框架的目标.就是我们熟知的当年的那个interface21,也亦非吴下阿蒙了,由它演进出来的 Spring,以及由它带来的崭新开发理念,也早已伴随着这个开源框架的广泛应用,而飞入寻常百姓家。与此同时,伴随着Spring的成熟,开源社区的成长,在Rod.Johnson的领导下,以

spring框架

spring框架 Spring框架是由于软件开发的复杂性而创建的。Spring使用的是基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅仅限于服务器端的开发。从简单性、可测试性和松耦合性角度而言,绝大部分Java应用都可以从Spring中受益。 ◆目的:解决企业应用开发的复杂性 ◆功能:使用基本的JavaBean代替EJB,并提供了更多的企业应用功能 ◆范围:任何Java应用 Spring是一个轻量级控制反转(IoC)和面向切面(AOP)的容器框架。 Spring是一个开源框架,它由Rod Johnson创建。它是为了解决企业应用开发的复杂性而创建的。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。 Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。 轻量--从大小与开销两方面而言Spring都是轻量的。完整的Spring框架可以在一个大小只有1MB多的JAR文件里发布。并且

Spring所需的处理开销也是微不足道的。此外,Spring是非侵入式的:典型地,Spring应用中的对象不依赖于Spring的特定类。 控制反转--Spring通过一种称作控制反转(IoC)的技术促进了松耦合。当应用了IoC,一个对象依赖的其它对象会通过被动的方式传递进来,而不是这个对象自己创建或者查找依赖对象。你可以认为IoC与JNDI相反--不是对象从容器中查找依赖,而是容器在对象初始化时不等对象请求就主动将依赖传递给它。 面向切面--Spring提供了面向切面编程的丰富支持,允许通过分离应用的业务逻辑与系统级服务(例如审计(auditing)和事务(transaction)管理)进行内聚性的开发。应用对象只实现它们应该做的--完成业务逻辑--仅此而已。它们并不负责(甚至是意识)其它的系统级关注点,例如日志或事务支持。 容器--Spring包含并管理应用对象的配置和生命周期,在这个意义上它是一种容器,你可以配置你的每个bean如何被创建--基于一个可配置原型(prototype),你的bean可以创建一个单独的实例或者每次需要时都生成一个新的实例--以及它们是如何相互关联的。然而,Spring不应该被混同于传统的重量级的EJB容器,它们经常是庞大与笨重的,难以使用。 框架--Spring可以将简单的组件配置、组合成为复杂的应用。在Spring中,应用对象被声明式地组合,典型地是在一个XML文件

各种框架架构图简介

1.Spring 架构图 Spring 是一个开源框架,是为了解决企业应用程序开发复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许您选择使用哪一个组件,同时为J2EE 应用程序开发提供集成的框架。Spring 框架的功能可以用在任何 J2EE 服务器中,大多数功能也适用于不受管理的环境。Spring 的核心要点是:支持不绑定到特定J2EE 服务的可重用业务和数据访问对象。这样的对象可以在不同J2EE 环境(Web或EJB )、独立应用程序、测试环境之间重用。 组成Spring 框架的每个模块(或组件)都可以单独存在,或者与其他一个或多个模块联合实现。每个模块的功能如下: ?核心容器:核心容器提供Spring 框架的基本功能。核心容器的主要组件是BeanFactory ,它是工厂模式的实现。BeanFactory 使用控制反转 (IOC )模式将应用程序的配置和依赖性规范与实际的应用程序代码分开。 ?Spring 上下文:Spring 上下文是一个配置文件,向Spring 框架提供上下文信息。Spring 上下文包括企业服务,例如JNDI 、EJB 、电子邮件、国际化、校验和调度功能。 ?Spring AOP :通过配置管理特性,Spring AOP 模块直接将面向方面的编程功能集成到了Spring 框架中。所以,可以很容易地使Spring 框架管理的任何对象支持AOP 。Spring AOP 模块为基于Spring 的应用程序 中的对象提供了事务管理服务。通过使用Spring AOP ,不用依赖EJB 组 件,就可以将声明性事务管理集成到应用程序中。

?Spring DAO :JDBC DAO 抽象层提供了有意义的异常层次结构,可用该结构来管理异常处理和不同数据库供应商抛出的错误消息。异常层次结构简化了错误处理,并且极大地降低了需要编写的异常代码数量(例如打开和关闭连接)。Spring DAO 的面向JDBC 的异常遵从通用的DAO 异常层次结构。 ?Spring ORM :Spring 框架插入了若干个ORM 框架,从而提供了ORM 的对象关系工具,其中包括JDO 、Hibernate 和iBatis SQL Map 。所有这些都遵从Spring 的通用事务和DAO 异常层次结构。 2.ibatis 架构图 ibatis 是一个基于Java的持久层框架。 iBATIS 提供的持久层框架包括SQL Maps 和Data Access Objects ( DAO ),同时还提供一个利用这个框架开发的 JPetStore 实例。 IBATIS :最大的优点是可以有效的控制sql 发送的数目,提高数据层的执行效率!它需要程序员自己去写sql 语句,不象hibernate 那样是完全面向对象的,自动化的,ibatis 是半自动化的,通过表和对象的映射以及手工书写的sql 语句,能够实现比hibernate 等更高的查询效率。 Ibatis 只是封装了数据访问层,替我们做了部分的对象关系映射。但代价是必须要写xml配置文件,相对于Hibernate 还要写很多sql 。Hibernate 通过工具直接从数据库模式生成实体类和基本的配置文件,而且大部分情况下不需要我们写sql ,会较大的提升开发效率。但这些也有很多的局限性,尤其是对

Spring教程

Spring教程

Spring教程 (1) Spring框架概述 (3) Spring是什么? (3) Spring的历史 (4) Spring的使命(Mission Statement) (4) Spring受到的批判 (4) Spring包含的模块 (4) 总结 (6) Spring的IoC容器 (6) 用户注册的例子 (7) 面向接口编程 (8) (用户持久化类)重构第一步——面向接口编程 (8) 重构第二步——工厂(Factory)模式 (9) 重构第三步——工厂(Factory)模式的改进 (10) 重构第四步-IoC容器 (10) 控制反转(IoC)/依赖注入(DI) (11) 什么是控制反转/依赖注入? (11) 依赖注入的三种实现形式 (12) BeanFactory (14) BeanFactory管理Bean(组件)的生命周期 (14) Bean的定义 (15) Bean的之前初始化 (18) Bean的准备就绪(Ready)状态 (21) Bean的销毁 (21) ApplicationContext (21) Spring的AOP框架 (21) Spring的数据层访问 (21) Spring的声明式事务 (21) Spring对其它企业应用支持 (21) 名词解释 容器: 框架: 组件: 服务:

Spring框架概述 主要内容:介绍Spring的历史,Spring的概论和它的体系结构,重点阐述它在J2EE中扮演的角色。 目的:让学员全面的了解Spring框架,知道Spring框架所提供的功能,并能将Spring 框架和其它框架(WebWork/Struts、hibernate)区分开来。 Spring是什么? Spring是一个开源框架,它由Rod Johnson创建。它是为了解决企业应用开发的复杂性而创建的。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring 的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。 ?目的:解决企业应用开发的复杂性 ?功能:使用基本的JavaBean代替EJB,并提供了更多的企业应用功能 ?范围:任何Java应用 简单来说,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。 ■轻量——从大小与开销两方面而言Spring都是轻量的。完整的Spring框架可以在一个大小只有1MB多的JAR文件里发布。并且Spring所需的处理开销也是微不足道的。此外,Spring是非侵入式的:典型地,Spring应用中的对象不依赖于Spring的特定类。 ■控制反转——Spring通过一种称作控制反转(IoC)的技术促进了松耦合。当应用了IoC,一个对象依赖的其它对象会通过被动的方式传递进来,而不是这个对象自己创建或者查找依赖对象。你可以认为IoC与JNDI相反——不是对象从容器中查找依赖,而是容器在对象初始化时不等对象请求就主动将依赖传递给它。 ■面向切面——Spring提供了面向切面编程的丰富支持,允许通过分离应用的业务逻辑与系统级服务(例如审计(auditing)和事务()管理)进行内聚性的开发。应用对象只实现它们应该做的——完成业务逻辑——仅此而已。它们并不负责(甚至是意识)其它的系统级关注点,例如日志或事务支持。 ■容器——Spring包含并管理应用对象的配置和生命周期,在这个意义上它是一种容器,你可以配置你的每个bean如何被创建——基于一个可配置原型(prototype),你的bean 可以创建一个单独的实例或者每次需要时都生成一个新的实例——以及它们是如何相互关联的。然而,Spring不应该被混同于传统的重量级的EJB容器,它们经常是庞大与笨重的,难以使用。 ■框架——Spring可以将简单的组件配置、组合成为复杂的应用。在Spring中,应用对象被声明式地组合,典型地是在一个XML文件里。Spring也提供了很多基础功能(事务管理、持久化框架集成等等),将应用逻辑的开发留给了你。 所有Spring的这些特征使你能够编写更干净、更可管理、并且更易于测试的代码。它

Spring框架有哪几部分组成-

Spring框架有哪几部分组成? 问题:Spring框架有哪几部分组成? 回答: Spring框架有七个模块组成组成,这7个模块(或组件)均可以单独存在,也可以与其它一个或多个模块联合使用,主要功能表现如下: Spring 核心容器(Core):提供Spring框架的基本功能。核心容器的主要组件是BeanFactory,她是工厂模式的实现。BeanFactory使用控制反转(Ioc)模式将应用程序的配置和依赖性规范与实际的应用代码程序分开。 Spring AOP:通过配置管理特性,Spring AOP模块直接面向方面的编程功能集成到了Spring框架中,所以可以很容易的使Spring框架管理的任何对象支持AOP。Spring AOP模块为基于Spring的应用程序中的对象提供了事务管理服务。通过使用Spring AOP,不用依赖于EJB组件,就可以将声明性事务管理集成到应用程序中。 Spring ORM:Spring框架集成了若干ORM框架,从而提供了ORM的对象关系工具,其中包括JDO、Hibernate、iBatis和TopLink。所有这些都遵从Spring的通用事务和DAO异常层结构。 Spring DAO:JDBC DAO抽象层提供了有意义的异常层次的结构,可用该结构来管理异常处理和不同数据供应商抛出的异常错误

信息。异常层次结构简化了错误处理,并且大大的降低了需要编写的异常代码数量(例如,打开和关系连接)。Spring DAO的面向JDBC 的异常遵从通用的DAO异常层结构。 Spring WEB:Web上下文模块建立在上下文模块(Context)的基础之上,为基于Web服务的应用程序提供了上下文的服务。所以Spring框架支持Jakarta Struts的集成。Web模块还简化了处理多部分请求及将请求参数绑定到域对象的工作。 Spring上下文(Context):Spring上下文是一个配置文件,向Spring框架提供上下文信息。Spring上下文包括企业服务,例如JNDI、EJB、电子邮件、国际化校验和调度功能。 Spring MVC:Spring的MVC框架是一个全功能的构建Web 应用程序的MVC实现。通过策略接口,MVC框架变成为高度可配置的,MVC容纳的大量视图技术,包括JSP、Velocity、Tiles、iText 和Pol

使用Spring框架实现简单的用户管理系统

实验5 Spring与数据库 一、实验目的 1. 掌握在Spring中配置数据源的方法 1. 掌握JdbcTemplate的使用方法 二、实验器材 1. 计算机 三、实验内容 使用Spring JdbcTemplate实现登录功能。具体要求如下:根据账号和密码进行登录操作,登录结果分为三种情况: 1. 账号不存在 2. 账号存在,但密码错误 3. 账号密码都正确 根据不同的登录结果,给出相应的提示信息。 四、实验步骤 编写User类 package org.hrbust.experiment.entity; public class User { int ID; String userName; String password; public int getID() { return ID;

} public void setID(int iD) { ID = iD; } public String getUserName() { return userName; } public void setUserName(String userName) { https://www.360docs.net/doc/a614619361.html,erName = userName; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } } 编写UserRowMapper package org.hrbust.experiment.service; import java.sql.ResultSet; import java.sql.SQLException; import https://www.360docs.net/doc/a614619361.html,er;

相关主题
相关文档
最新文档