深入Spring简介与入门new

上传人:宝路 文档编号:47547924 上传时间:2018-07-02 格式:PPT 页数:53 大小:1.48MB
返回 下载 相关 举报
深入Spring简介与入门new_第1页
第1页 / 共53页
深入Spring简介与入门new_第2页
第2页 / 共53页
深入Spring简介与入门new_第3页
第3页 / 共53页
深入Spring简介与入门new_第4页
第4页 / 共53页
深入Spring简介与入门new_第5页
第5页 / 共53页
点击查看更多>>
资源描述

《深入Spring简介与入门new》由会员分享,可在线阅读,更多相关《深入Spring简介与入门new(53页珍藏版)》请在金锄头文库上搜索。

1、L o g oSpring简介简介v 与Hibernate、Struts一样,Spring也是一个开源项目,它 的作者是Rod Johnson,官方网站是 http:/www.springframework.org/。 v Spring的基础思想来源于Rod Johnson的一本著名的j2ee书 籍:Expert One-on-One J2EE Design and Development 。在这本书中,Rod Johnson列举EJB的种种问题,并提出 了相应的解决办法。 v 从那时起,人们对于EJB的狂热追捧才算结束,转而进入更 理性的时代。 简介v Rod Johnson是悉尼大学博士,

2、猜猜他的专业是什么? v Rod Johnson在开发出Spring之前,主要从事项目开发咨询 与培训工作。在Spring被广泛认可之后,创办了 interface21公司,致力于Spring咨询与培训. v Rod Johnson还是JDO2.0和Servlet2.4专家组成员。简介v Spring核心技术包括两个方面,一是控制反转( Inversion of Control, IoC),另一个是面向方面编 程(Aspect Oriented Programming, AOP)。 v Spring囊括了十分丰富的内容,包括表述层、数据层,它 提供了许多原来只有EJB才能提供的功能(如宣称式的

3、事 务管理),但Spring又无须运行在EJB容器上。 v 无论Spring涉足到哪一个领域,使用的都是简单的 JavaBean,一般无须再实现复杂的接口。Spring框架结构Spring框架结构vCore 封装包是框架的最基础部分,提供IoC和依赖注入特性。这里的 基础概念是BeanFactory,它提供对Factory模式的经典实现来消 除对程序性单例模式的需要,并真正地允许你从程序逻辑中分离出依赖 关系和配置。 vDao提供了JDBC的抽象层,它可消除冗长的JDBC编码和解析数据库 厂商特有的错误代码。 并且,JDBC 封装包还提供了一种比编程性更 好的声明性事务管理方法,不仅仅是实现了

4、特定接口,而且对所有的 POJOs(plain old Java ob jects)都适用。 vORM 封装包提供了常用的“对象/关系”映射APIs的集成层。 其中包 括JPA、JDO、Hibernate和 iBatis 。利用ORM封装包,可以混 合使用所有Spring提供的特性进行“对象/关系”映射,如前边提到的 简单声明性事务管理。Spring框架结构v Spring的 AOP 封装包提供了符合 AOP Alliance规范 的面向方面的编程(aspect-oriented programming )实现,让你可以定义,例如方法拦截器(method- interceptors)和切点(p

5、ointcuts),从逻辑上讲, 从而减弱代码的功能耦合,清晰的被分离开。而且,利用 source-level的元数据功能,还可以将各种行为信息合并 到你的代码中,这有点象.Net的attribute的概念。Spring框架结构v Spring中的 Web 包提供了基础的针对Web开发的集成 特性,例如多方文件上传,利用Servlet listeners进行 IoC容器初始化和针对Web的application context。 当与WebWork或Struts一起使用Spring时,这个包使 Spring可与其他框架结合。 v Spring中的 MVC 封装包提供了Web应用的Model-

6、View-Controller(MVC)实现。Spring的MVC框架 并不是仅仅提供一种传统的实现,它提供了一种 清晰的 分 离模型,在领域模型代码和web form之间。并且,还可 以借助Spring框架的其他特性。准备工作v 下载SpringFramework的最新版本,并解压缩到指定 目录。 v 在IDE中新建一个项目,并将Spring.jar将其相关类库加 入项目。 v Spring采用Apache common_logging,并结合 Apache log4j作为日志输出组件。为了在调试过程中能 观察到Spring的日志输出,在CLASSPATH中新建 log4j.properti

7、es配置文件,内容如下:log4j.rootLogger=DEBUG, stdout log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayoutlog4j.appender.stdout.layout.ConversionPattern=%c1 - %m%n概述v Spring Framework中目前最引人注目的,也就是名为 控制反转(IOC Inverse Of Control)或者依赖注入 (DI Dependence

8、Injection)的设计思想,这的 确是相当优秀的设计理念,但是,光一个单纯的设计模式 并不能使得Spring如此成功,而Spring最成功的地方也 并不仅仅在于采用了IOC/DI的设计,Spring涵盖了应用 系统开发所涉及的大多数技术范畴,包括MVC、ORM以 及Remote Interface等,这些技术往往贯穿了大多数应 用系统的开发过程。Spring从开发者的角度对这些技术内 容进行了进一步的封装和抽象,使得应用开发更为简便。概述v Spring并非一个强制性框架,它提供了很多独立的组件可 供选择。在一些项目中,就仅引用了Spring的ORM模板 机制对数据存取层进行处理,并取得了

9、相当理想的效果。 评定一个框架是否优良的条件固然有很多种,但是笔者始 终认为,对于应用系统开发而言,我们面临着来自诸多方 面的压力,此时,最能提高生产力的技术,也就是最有价 值的技术。很高兴,Spring让笔者找到了这样的感觉。Spring 基础语义v 何谓控制反转(IoC = Inversion of Control),何谓 依赖注入(DI = Dependency Injection)? IoC,用白话来讲,就是由容器控制程序之间的关系,而 非传统实现中,由程序代码直接操控。这也就是所谓“控制 反转”的概念所在:控制权由应用代码中转到了外部容器, 控制权的转移,是所谓反转。相对IoC 而言

10、,“依赖注入” 的确更加准确的描述了这种古老而又时兴的设计理念。从 名字上理解,所谓依赖注入,即组件之间的依赖关系由容 器在运行期决定,形象的来说,即由容器动态的将某种依 赖关系注入到组件之中。Spring 基础语义v依赖注入实例: v 为什么称之为“古老而又时兴”的设计理念?至于“时兴”自 然不必多费唇舌,看看国内外大小论坛上当红的讨论主题 便知。至于“古老”,相信大家对下面图片中的设备不 会陌生:Spring 基础语义v 这就是大家主要工作装备,IBM T40笔记本电脑一台、 USB硬盘和U盘各一只。想必大家在日常工作中也有类似 的一套行头。这与依赖注入有什么关系? 图中三个设备都有一个共

11、同点,都支持USB 接口。当我们 需要将数据复制到外围存储设备时,可以根据情况,选择 是保存在U盘还是USB硬盘,下面的操作大家也都轻车熟 路,无非接通USB接口,然后在资源浏览器中将选定的文 件拖放到指定的盘符。这样的操作在过去几年中每天都在 我们身边发生,而这也正是所谓依赖注入的一个典型案例 ,上面称之为“古老”想必也不为过分。 再看上例中,笔记本电脑与外围存储设备通过预先指定的 一个接口(USB)相连,对于笔记本而言,只是将用户指Spring 基础语义v 定的数据发送到USB接口,而这些数据何去何从,则由当 前接入的USB设备决定。在USB设备加载之前,笔记本不 可能预料用户将在USB接

12、口上接入何种设备,只有USB设 备接入之后,这种设备之间的依赖关系才开始形成。 对应上面关于依赖注入机制的描述,在运行时(系统开机 ,USB 设备加载)由容器(运行在笔记本中的Windows 操作系统)将依赖关系(笔记本依赖USB设备进行数据存 取)注入到组件中(Windows文件访问组件)。 这就是依赖注入模式在现实世界中的一个版本。 依赖注入的目标并非为软件系统带来更多的功能,而是为 了提升组件重用的概率,并为系统搭建一个灵活、可扩展 的平台。Spring 基础语义v依赖注入的几种实现类型: v Type1接口注入:public class ClassA private Interface

13、B clzB; public doSomething() Ojbect obj =Class.forName(Config.BImplementation).newInstance(); clzB = (InterfaceB)obj; clzB.doIt() Spring 基础语义v Type2设值注入在各种类型的依赖注入模式中,设值注入模式在实际开发 中得到了最广泛的应用(其中很大一部分得力于Spring 框架的影响)。在笔者看来,基于设置模式的依赖注入机 制更加直观、也更加自然。Quick Start中的示例,就是 典型的设置注入,即通过类的setter方法完成依赖关系的 设置。Sprin

14、g 基础语义v Type3构造子注入构造子注入,即通过构造函数完成依赖关系的设定,如:public class DIByConstructor private final DataSource dataSource; private final String message; public DIByConstructor(DataSource ds, String msg) this.dataSource = ds; this.message = msg; Spring 基础语义v 几种依赖注入模式的对比总结: 接口注入模式因为历史较为悠久,在很多容器中都已经得 到应用。但由于其在灵活性、易用

15、性上不如其他两种注入 模式,因而在IOC的专题世界内并不被看好。Type2和 Type3型的依赖注入实现则是目前主流的IOC实现模式。 这两种实现方式各有特点,也各具优势.Spring 基础语义v Type2 设值注入的优势 v 1 对于习惯了传统JavaBean开发的程序员而言,通过 setter方法设定依赖关系显得更加直观,更加自然。 v 2 如果依赖关系(或继承关系)较为复杂,那么Type3 模式的构造函数也会相当庞大(我们需要在构造函数中设 定所有依赖关系),此时Type2模式往往更为简洁。 v 3 对于某些第三方类库而言,可能要求我们的组件必须 提供一个默认的构造函数(如Struts

16、中的Action),此 时Type3类型的依赖注入机制就体现出其局限性,难以完 成我们期望的功能。Spring 基础语义v Type3 构造子注入的优势:1 “在构造期即创建一个完整、合法的对象”,对于这条Java 设计原则,Type3无疑是最好的响应者。 2 避免了繁琐的setter方法的编写,所有依赖关系均在构造 函数中设定,依赖关系集中呈现,更加易读。 3 由于没有setter方法,依赖关系在构造时由容器一次性设 定,因此组件在被创建之后即处于相对“不变”的稳定状态,无需 担心上层代码在调用过程中执行setter方法对组件依赖关系产 生破坏,特别是对于Singleton模式的组件而言,这可能对整 个系统产生重大的影响。 4 同样,由于关联关系仅在构造函数中表达,只有组件创建者 需要关心组件内部的依赖关系。对调用者而言,组件中的依赖关 系处于黑盒之中。对上层屏蔽不必要的信息,也为系统的层次清 晰性提供了保证。Spring 基础语义5 通过构造子注入,意味着我们可以在构造

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号