spring framework( 一 )

29
Version 1.0 周周 ([email protected] m) Spring Framework( ) 快快快快

Upload: arden-talley

Post on 15-Mar-2016

104 views

Category:

Documents


6 download

DESCRIPTION

Spring Framework( 一 ). 快速入门. 课程介绍. 本课程主要讲授 Spring 1.x 基础知识 适用于 Java 开发工程师 面向的学员是 对 Servlet , JSP 有基本了解的 J2EE 开发工程师 全部课程时间大约是 120 分钟. 概 要. Spring Framework 概览 Spring 开发快速入门. 1 什么是 Spring?. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Spring Framework( 一 )

Version 1.0 周甫 ([email protected])

Spring Framework( 一 )

快速入门

Page 2: Spring Framework( 一 )

周甫 ([email protected])2

课程介绍• 本课程主要讲授本课程主要讲授 Spring 1.xSpring 1.x 基础知识基础知识• 适用于适用于 JavaJava 开发工程师开发工程师• 面向的学员是面向的学员是对对 ServletServlet ,, JSPJSP 有基本有基本

了解的了解的 J2EEJ2EE 开发工程师开发工程师• 全部课程时间大约是全部课程时间大约是 120120 分钟分钟

Page 3: Spring Framework( 一 )

周甫 ([email protected])3

概 要• Spring Framework 概览• Spring 开发快速入门

Page 4: Spring Framework( 一 )

周甫 ([email protected])4

1 什么是 Spring?• Spring 是一个开源框架,它由 Rod Johnson 创建。它是为了解决企业应用开发的复杂性而创建的。 Spring 使用基本的 JavaBean 来完成以前只可能由 EJB 完成的事情。然而, Spring 的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何 Java 应用都可以从 Spring 中受益。

– 目的:解决企业应用开发的复杂性– 功能:使用基本的 JavaBean 代替 EJB ,并提供了更多的企业应用功能– 范围:任何 Java 应用

• 简单来说, Spring 是一个轻量级的控制反转 (IoC) 和面向切面 (AOP) 的容器框架

Page 5: Spring Framework( 一 )

周甫 ([email protected])5

1.1 Spring 的特点Spring 具有以下特点 :• 轻量级 Spring 的核心文件只有不到 1MB 的大小,而使用 Spring 核心所需要的资源也是 很小的,而 Spring 是个非侵入性框架,它的目的之一,是让应用程序不感受到框 架的存在,减低应用程序从框架移植时的负担。• 容器 Spring 核心本身是个容器,管理对象的生命周期、对象的组态、相依注入等,并可以控制对象的创建方式。• IoC Spring 的核心概念是 IoC, 更具体而易懂的名词是依赖注入 (Dependency Injection), 使用 Spring, 程序员不必自己在程序代码中维护对象的依赖关系 , 只需在配置文件中加以设定 ,Spring 核心容器会自动根据设定将依赖注入指定的对象。

Page 6: Spring Framework( 一 )

周甫 ([email protected])6

1.2 Spring 的历史 Spring Framework 实际上是 Rod Johnson 所著的《 Expert One-on-O

ne J2EE Designand Development 》一书中所阐述的设计思想的具体实现。在 One-on-One 这本书中 Rod Johnson 倡导 J2EE 实用主义的设计思想,并随书提供了一个初步的开发框架实现。 Rod Johnson 在开发包的基础之上,进行了进一步的改造和扩充,使其发展为一个更加开放、清晰、全面、高效的开发框架。

Page 7: Spring Framework( 一 )

周甫 ([email protected])7

1.3 Spring 的使命• J2EE 应该更加容易使用。• 面向对象的设计比任何实现技术(比如 J2EE)都重要。• 面向接口编程,而不是针对类编程。 Spring 将使用接口的复杂度降低到零。• 代码应该易于测试。 Spring 框架会帮助你,使代码的测试更加简单。• JavaBean 提供了应用程序配置的最好方法。• 在 Java 中,已检查异常( Checked exception)被过度使用。框架不应该迫使你捕获不能恢复的异常。

Page 8: Spring Framework( 一 )

周甫 ([email protected])8

1.4 Spring 受到的批判• Spring 不是一个“标准” .

– Spring 不是 J2EE规范的一部分,没有通过 JCP( Java Community Process)的审核认可。 批判来源于 EJB 的支持者,他们认为 EJB 是一个标准,是 J2EE规范的一部分。当然,标准最主要的目的是希望在应用服务器之间是可移植的,可是 EJB 的移植却并不轻松,不同应用服务器的 ejb 部署描述文件总是有着差异。而且 EJB 开发的类完全依赖于 EJB 容器。而 Spring对其管理的 Bean没有任何形式的侵入,这样的 Bean 是普通 Java 对象(POJO) ,那么它就遵循 Java标准,可以到处移植。• Spring 是“超重量级”的 . Spring涉及的内容确实很多(例如:提供了对 jdbc 、 ORM 、远程访问等等的支持),但其本质还是 Java技术的庞大。 Spring 只是为了这些技术提供更好的使用方案而已。当然 , 开发者可以只选取需要使用的部分 .

Page 9: Spring Framework( 一 )

周甫 ([email protected])9

1.5 Spring 体系Spring 框架由七个定义明确的模块组成 :

Page 10: Spring Framework( 一 )

周甫 ([email protected])10

1.5.1 体系介绍• 如果作为一个整体, Spring 7 个模块为开发者提供了开发企业应用所需的一切。但开发者不必将应用完全基于 Spring 框架。开发者可以自由地挑选适合的模块而忽略其余的模块。 • 如图所示,所有的 Spring模块都是在核心容器之上构建的。容器定义了 Bean 是如何创建、配置和管理的——更多的 Spring细节。当开发者配置应用时,会潜在地使用这些类。但是作为一名开发者,最可能对影响容器所提供的服务的其它模块感兴趣。这些模块将会为开发者提供用于构建应用服务的框架,例如AOP和持久性。

Page 11: Spring Framework( 一 )

周甫 ([email protected])11

1.5.2 核心容器 • 这是 Spring 框架最基础的部分,它提供了依赖注入( Dependency Injection)特征来实现容器对 Bean 的管理。这里最基本的概念是 BeanFactory ,它是任何 Spring 应用的核心。 BeanFactory是工厂模式的一个实现,它使用 IoC 将应用配置和依赖说明从实际的应用代码中分离出来。

Page 12: Spring Framework( 一 )

周甫 ([email protected])12

1.5.3 应用上下文 (Context) 模块 • 核心模块的 BeanFactory 使 Spring 成为一个容器,而上下文模块使它成为一个框架。这个模块扩展了 BeanFactory 的概念,增加了对国际化( I18N)消息、事件传播以及验证的支持。 • 另外,这个模块提供了许多企业服务,例如电子邮件、 JNDI访问、 EJB集成、远程以及时序调度( scheduling)服务。也包括了对模版框架例如Velocity 和 FreeMarker集成的支持。

Page 13: Spring Framework( 一 )

周甫 ([email protected])13

1.5.4 Spring 的 AOP 模块• Spring 在它的 AOP模块中提供了对面向切面编程的丰富支持。这个模块是在 Spring 应用中实现切面编程的基础。为了确保 Spring与其它 AOP框架的互用性, Spring 的 AOP支持基于 AOP联盟定义的 API 。 AOP联盟是一个开源项目,它的目标是通过定义一组共同的接口和组件来促进 AOP的使用以及不同的 AOP实现之间的互用性。通过访问他们的站点 http://aopalliance.sourceforge.net ,可以找到关于 AOP联盟的更多内容。• Spring 的 AOP模块也将元数据编程引入了 Spring 。使用 Spring 的元数据支持,可以为源代码增加注释,指示 Spring 在何处以及如何应用切面函数。

Page 14: Spring Framework( 一 )

周甫 ([email protected])14

1.5.5 JDBC 抽象和 DAO 模块• 使用 JDBC经常导致大量的重复代码,取得连接、创建语句、处理结果集,然后关闭连接。 Spring 的 JDBC 和 DAO模块抽取了这些重复代码,因此可以保持数据库访问代码干净简洁,并且可以防止因关闭数据库资源失败而引起的问题。• 这个模块还在几种数据库服务器给出的错误消息之上建立了一个有意义的异常层。使开发者不用再试图破译神秘的私有的 SQL错误消息! • 另外,这个模块还使用了 Spring 的 AOP模块为 Spring 应用中的对象提供了事务管理服务。

Page 15: Spring Framework( 一 )

周甫 ([email protected])15

1.5.6 对象 / 关系映射集成模块• 对那些更喜欢使用对象 /关系映射工具而不是直接使用 JDBC 的人, Spring 提供了 ORM模块。 Spring 并不试图实现它自己的 ORM 解决方案,而是为几种流行的 ORM 框架提供了集成方案,包括Hibernate 、 JDO 和 iBATIS SQL映射。Spring 的事务管理支持这些 ORM 框架中的每一个也包括 JDBC 。

Page 16: Spring Framework( 一 )

周甫 ([email protected])16

1.5.7 Spring 的 Web 模块• Web上下文模块建立于应用上下文模块之上,提供了一个适合于Web应用的上下文。另外,这个模块还提供了一些面向服务支持。例如:实现文件上传的 multipart请求,它也提供了 Spring 和其它Web框架的集成,比如 Struts 、WebWork 。

Page 17: Spring Framework( 一 )

周甫 ([email protected])17

1.5.8 Spring 的 MVC 框架 • Spring 为构建Web应用提供了一个功能全面的 MVC 框架。虽然 Spring 可以很容易地与其它 MVC 框架集成,例如 Struts ,但 Spring 的MVC 框架使用 IoC 对控制逻辑和业务对象提供了完全的分离。• 它允许声明性地将请求参数绑定到业务对象中,此外, Spring 的 MVC 框架还可以利用 Spring的任何其它服务,例如国际化信息与验证。

Page 18: Spring Framework( 一 )

周甫 ([email protected])18

1.5.9 Spring 层次

Page 19: Spring Framework( 一 )

周甫 ([email protected])19

1.5.10 总结• Spring带来了复杂的 J2EE 开发的春天。它的核心是轻量级的 IoC 容器,它的目标是为 J2EE 应用提供了全方位的整合框架,在 Spring 框架下实现多个子框架的组合,这些子框架之间可以彼此独立,也可以使用其它的框架方案加以代替,Spring希望为企业应用提供一站式( one-stop shop)的解决方案。

Page 20: Spring Framework( 一 )

周甫 ([email protected])20

2 快速入门• 例子描述 :

– 用一个类实现一个接口,完成输出“HELLO 某某”的功能

Page 21: Spring Framework( 一 )

周甫 ([email protected])21

2.1 配置 Spring• 请在 Eclipse新建一个 j2se project• 使用 MyEclipse 导入 Spring 1.2 core lib.配置好得项目看起来如右图 :其中 :• com.demo.impl 放置 spring bean class• com.demo.test 测试类• applicationContext.xml spring bean 配置文件

Page 22: Spring Framework( 一 )

周甫 ([email protected])22

2.2 Spring Bean: HelloBeanpublic class HelloBean{ private String helloWorld;

public String getHelloWorld(){ return helloWorld;}public void setHelloWorld(String helloWorld){ this.helloWorld = helloWorld;}}

Page 23: Spring Framework( 一 )

周甫 ([email protected])23

2.3 applicationContext.xml

<beans><bean id="hellobean" class="com.demo.impl.HelloBean">

<property name="helloWorld"><value> 你好 </value>

</property></bean></beans>

Page 24: Spring Framework( 一 )

周甫 ([email protected])24

2.4 测试: ApplicationContext

public static void main(String[] args){ ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");HelloBean hello = (HelloBean)ac.getBean("hellobean");System.out.println(hello.getHelloWorld());}

Page 25: Spring Framework( 一 )

周甫 ([email protected])25

2.4 测试: BeanFactory

public static void main(String[] args){

Resource rs = new ClassPathResource("applicationContext.xml");BeanFactory factory = new XmlBeanFactory(rs);HelloBean hello2 = (HelloBean)factory.getBean("hellobean");

System.out.println(hello2.getHelloWorld());}

Page 26: Spring Framework( 一 )

周甫 ([email protected])26

优势• 所有程序代码中,除了测试类之外,并没有出现 Spring 中的任何组件• HelloBean 的 helloWorld属性由 Spring通过读取配置文件( applicationContext.xml)动态设置• 如果HelloBean 改用接口来编程 ,那么实现类的具体名称都不需要 .

Page 27: Spring Framework( 一 )

周甫 ([email protected])27

对开发的帮助• 组件并不需要实现框架指定的接口,因此可以轻松的将组件从 Spring 中脱离• 组件间的依赖关系减少,极大改善了代码的可重用性

Page 28: Spring Framework( 一 )

周甫 ([email protected])28

BeanFactory 与 ApplicationContext• BeanFactory 负责读取 spring bean 配置文件,管理对象的载入、生成、对象之间的关系维护 , 负责 bean 的生命周期 . • 对于简单的应用程序来说 ,Beanfactory已经足够 . 但如果要用到 Spring 在框架中的一些功能及高级特性 ,则使用 ApplicationContext , BeanFactory 主要用于一些受限设备 ,如移动设备等 .

Page 29: Spring Framework( 一 )

周甫 ([email protected])29

配置文件读取方式• Rod Johnson 建议使用 ApplicationContext.• 读取配置文件的方式有常用的三种 :

– FileSystemXmlApplicationContext 配置文件必须位于项目根目录中 ,示例中如 :e:\workspace\spring-demo-j2se 下 ,与 src平级 .– ClassPathXmlApplicationContext 配置文件在 classpath 中 , 也就是在 src 下– XmlWebApplicationContext 在Web应用程序的文档结构中读取