spring学习笔记.docx
- 文档编号:3036103
- 上传时间:2022-11-17
- 格式:DOCX
- 页数:27
- 大小:105.52KB
spring学习笔记.docx
《spring学习笔记.docx》由会员分享,可在线阅读,更多相关《spring学习笔记.docx(27页珍藏版)》请在冰豆网上搜索。
spring学习笔记
Spring学习笔记
林志龙
2012年02月04日
spring概述3
控制反转,还是依赖注入3
面向方面编程5
一致性抽象5
事务管理5
测试5
与其它框架整合5
控制反转6
容器(container)6
IoC类型6
IoCinspring7
DIwithspring11
AOP12
定义12
Aop类型13
实现策略13
aop设计问题13
spring中的aop14
spring工作原理14
框架概述14
使用场景15
Bean工厂与应用程序上下文18
事物管理20
轻量级事务基础设施20
spring事务管理20
持久化20
数据访问策略20
持久化数据的缓存21
资源管理21
JDBC21
IBATISSQL21
HIBERANTE21
DAO21
远程调用22
RMI22
EJB22
JAX-RPC22
Hessian22
Burlap22
Web层设计22
设计目标22
集成struts23
测试23
单元测试23
可测试性23
测试驱动开发24
覆盖率分析与其他测试工具24
性能与可伸缩性24
定义24
设置清晰的目标24
体系结构的选择25
不同实现的选择25
调优和部署25
一种循证的性能策略25
Spring开发25
最佳实践25
参考25
spring概述
Spring项目启动于2003年2月,其中基础代码来自《expertone-on-onej2eedesignanddevelopment》。
Spring是指一个用于构造Java应用程序的轻量级框架,不限定于只编写web应用,最少侵入。
Spring的核心是个轻量级(Lightweight)的容器(Container),它是实现IoC(InversionofControl)容器、非侵入性(Nointrusive)的框架,并提供AOP(Aspect-orientedprogramming)概念的实现方式,提供对持久层(Persistence)、事务(Transaction)的支持,提供MVCWeb框架的实现,并对一些常用的企业服务API(ApplicationInterface)提供一致的模型封装,是一个全方位的应用程序框架(Applicationframework),除此之外,对于现存的各种框架(Struts、JSF、Hibernate等),Spring也提供了与它们相整合的方案。
本质上讲,Spring是IOC(InversionofControl)和面向切面编程(AOP)的组合体。
它是一个非侵入式的框架,增强了POJO的功能。
从服务上讲(Withaserviceabstraction),它将程序代码从J2EE环境解耦到普通的java对象(自然,这些代码可以脱离J2EE而在多种环境中运行)。
它还在很多功能上提供了除EJB之外的选择――比如为所有的POJO提供声明式事务。
Spring被广泛运用到很多项目中,从小的web程序到大的企业应用程序。
控制反转,还是依赖注入
Spring框架的核心基于“控制反转(InversionofControl,IoC)”原理。
IoC是一种将组件依赖关系的创建和管理置于程序外部的技术。
假设一个例子,类Foo依赖于类Bar的一个实例来进行某些操作。
传统的方式,Foo使用new操作符创建一个Bar的实例,或者通过某种工厂类来获得。
使用IoC方法,Bar的一个实例(或者其子类的实例)是通过某些外部处理过程在运行时动态传递给Foo的。
这种在运行时注入依赖的行为方式,使得IoC后来被改称为另一个含义更明确的名字:
“依赖注入(DependencyInjection,DI)”。
Spring的DI实现是基于两个Java核心概念:
JavaBean和Interface。
当你使用DI的时候,你可以使得依赖配置与你的代码保持隔离。
JavaBeans提供了一种创建Java资源的标准方法,并且这些资源是可以通过标准方式配置的。
接口与DI是相互受益的技术,针对接口设计与编程有助于应用程序的灵活性,但要把采用接口设计的应用程序的各部分连接起来,其复杂度非常高,并且给开发者带来了额外的编码负担。
通过采用DI,为基于接口的设计而编写的辅助代码大大减少了,近乎于零。
反过来,通过采用接口,你可以获得DI的最大好处,因为你的bean可以采用任何满足其依赖的接口实现。
减少“粘合”代码:
DI带来的最大的好处之一就是,它可以奇迹般地消除你为了连接应用程序的各个部件而编写的大量代码。
这些代码常常很简单而且琐碎——通过构造一个新的对象来创建依赖。
然而,当你需要从JNDI库中查询依赖,或者这些调用不能直接通过调用产生时(比如访问远程资源),这些琐碎的代码可能会变得相当复杂。
在这些情形下,DI真的可以简化粘合代码,因为它提供了自动的JNDI查询,以及对远程资源的自动代理。
依赖外置化:
你可以将依赖的配置外置,这样你可以无需重新编译代码就重新配置。
这给你带来两个有趣的好处。
首先,Spring中的DI是一种理想的配置方式,可以让你在外部自由的配置应用程序的所有选项。
其次,依赖外置使得在不同的实现间切换变得非常容易。
假设你有一个DAO组件,它针对PostgreSQL数据库进行数据操作,你想把它升级到Oracle。
使用DI,你可以简单地重新配置你的业务对象的依赖关系,让它使用Oracle实现而非PostgreSQL实现。
在统一的地方管理依赖:
采用传统的方式管理依赖时,你在任何需要的地方创建依赖的对象实例——就在依赖者的内部。
在大部分简单的程序中,你会让依赖关系在你的代码中散播,改变它们通常会带来问题。
当使用DI的时候,所有关于依赖的信息都通过一个简单的库进行管理,使得管理依赖变得既简单又不容易出错。
提高可测试性:
当面向DI设计你的类时,你就可以便捷地替换依赖。
当在测试程序的时候,这特别有用。
假设一个业务对象进行某些复杂的处理,其中一部分它使用一个DAO对象来访问存储在关系数据库中的对象。
在测试的时候,你对测试DAO本身不感兴趣,你只是简单地希望采用不同的数据集来测试你的业务对象。
在通常的方式中,你的测试会变得很痛苦,因为你无法简单地把这个DAO实现替换为一个模拟实现,模拟返回你的测试数据。
相反,你需要确认你的测试数据库中包含正确的数据,为你的测试使用完整的DAO实现。
使用DI的话,你可以为你的DAO对象创建一个模拟实现,然后把它传递给你的业务对象进行测试。
这种机制可以扩展到测试你的应用的任何一层,对测试web组件特别有用,你可以创建HttpServletRequest和HttpServeletResponse的模仿实现。
鼓励良好的程序设计:
针对DI设计意味着整体上针对接口设计。
典型的基于注入的应用程序,其所有的主要组件都是定义为接口的,然后这些接口的具体实现采用DI容器创建并糅合到一起。
在DI和基于DI的容器比如Spring出现之前,这种设计在Java中就是可行的,但是通过使用Spring,你免费获得了一个包含完整DI功能的基础,你可以集中精力于建立你的业务逻辑,而非关注支持业务的框架。
面向方面编程
AOP提供了实现横切逻辑的功能——这一逻辑应用于你应用程序的很多地方,只需要编写一次,就可以把这一逻辑自动在整个应用中实施目前有两种主流的AOP实现。
静态AOP,比如AspectJ(www.apsectj.org),提供了编译器的方法来构建基于AOP的逻辑,并把它加入到应用程序中。
动态AOP,比如Spring中的这样,允许在运行时把横切逻辑应用到任意一段代码中。
两种不同的AOP方法都有其适用面,实际上,AOP提供了与AspectJ整合的功能。
一致性抽象
异常
资源管理
事务管理
事务管理Spring提供了极好的事务管理抽象层,允许你进行编程式或者声明式事务控制。
通过使用Spring的抽象层来进行事务,你可以很容易地抽换底层的数据访问协议和资源管理方式。
你可以从一个简单的、本地的、单资源的事务管理起步,转移到全局的、多资源的事务管理环境,而无需更改你的代码。
测试
与其它框架整合
在Spring中访问数据
Spring中的JDBC支持使得编写基于JDBC的应用变得更加现实了,就算是比较复杂的应用程序也行。
对Hibernate、iBATIS和JDO的支持让本就简单的API更加简化,减轻了开发者的负担,易于在同一程序中混合不同的数据访问技术。
简化与整合J2EE
Web层的MVC
远程访问(Remoting)支持
Mail支持
计划任务支持
简化的异常处理
源代码级的Metadata(元数据)
控制反转
容器(container)
是指应用代码的运行框架。
提供服务:
生命周期管理
查找服务
配置服务
依赖决议
理想容器特点:
可接插性
一致性
一站式购物
提供企业级服务
IoC类型
type
name
description
Type1
Interfacedependent
Beansmustimplementspecificinterfacestohavetheirdependenciesmanagedbythecontainer.
Type2
Setterinjection
Dependenciesandpropertiesareconfiguredthroughabean’ssettermethods.
Type3
Constructorinjection
Dependenciesandpropertiesareconfiguredthroughthebean’sconstructor.
依赖注入的基本原则:
应用对象不应该负责查找资源或者其他依赖的协作组件。
配置对象的工作应该由IoC容器完成,“查找资源”的逻辑应该从应用代码中抽取出来,交给容器负责。
接口方法注入:
组件通过接口的方式完成注入,具备侵入性,它要求组件必须与特定的接口相关联,因此并不被看好,实际使用有限。
设值方法注入:
组件通过javabean属性来表达自己需要配置的值和依赖的对象,建立在javabean规范之上。
构造子注入:
组件以构造子参数的形式描述自己需要的依赖关系。
IoCinspring
Spring的IoC控件主要专注于如何利用classes、对象和服务去组成一个企业级应用,通过规范的方式,将各种不同的控件整合成一个完整的应用。
Spring中使用了很多被实践证明的最佳实践和正规的设计模式,并且进行了编码实现。
如果你是一个,构架师或者开发人员完全可以取出它们集成到你自己的应用之中。
这对于那些使用了SpringFramework的组织和机构来说,在spring基础上实现应用不仅可以构建优秀的,可维护的应用并对Spring的设计进行验证,确实是一件好事情。
Spring框架所提供的众多功能之所以能成为一个整体正是建立在IoC的基础之上,org.springframework.beans及org.springframework.context包是SpringIoC容器的基础。
BeanFactory提供的高级配置机制,使得管理任何性质的对象成为可能。
ApplicationContext是BeanFactory的扩展,功能得到了进一步增强,比如更易与SpringAOP集成、消息资源处理(国际化处理)、事件传递及各种不同应用
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- spring 学习 笔记