分享
 
 
 

编程经典技术:Spring的巧妙之处

王朝other·作者佚名  2008-05-31
窄屏简体版  字體: |||超大  

作者注:在《Better, Faster, Lighter Java》一书第八章的这份节录中,我们将看到一个使用Spring框架的企业web应用程序例子。尽管Hibernate提供了单个的服务,Spring框架却提供了一种高效地构建和汇编Java应用程序的方法,以及多种服务的抽象。尽管Spring支持多种服务,但是它最受关注也是最出色的特性是杰出的分层和封装。与EJB一样,Spring的中心组件是一个容器;而且Spring框架也同样提供对核心J2EE服务的访问。但是这就是它们仅有的相似之处了。下面是一个比喻。

我喜欢皮划艇运动,也花了很多时间来教授皮划艇技巧。我的一个专长就是教授学生如何在浪花中翻转弄翻了的皮划艇。一天,我向一位四肢发达的大个子和一位玲珑瘦小、体重只有97磅的女士传授该技巧。当我在陆地上从头到尾仔细地讲述这项技巧的时候,大个子直勾勾的盯着远方,不感爱好。而那位女士注重力集中,而且希望反复练习这项基础技巧。在半个小时之内,她就出色地完成了第一次翻转,而他只是上下摇摆,在平静的水面上拍打出细小的白色泡沫。直到第三个学时,他才完成这个动作。在以后的几个学时中,她依靠技巧快速提高,而他却单凭力量在水中挣扎。到了实践的时候,她翻转了皮划艇,而他却在游泳。程序员们,请记住:解决问题的最佳方式是依靠简单性和技巧,而不是蛮力。

Pet Store:一个反例

Pet Store J2EE应用程序是一个很糟糕的编程例子。它误导成千上万名J2EE开发人员构建出设计糟糕、性能低下的代码。它还是一个基准的争论焦点。Middleware Company致力于制订比较J2EE和微软的。NET平台的基准。他们选择Pet Store的J2EE版本作为基准的基础。尽管他们很努力地调优,J2EE版本还是惨败给Microsoft .NET版本,因此导致J2EE设计备受批评。我不想针对这次惨败谴责什么。我有不同的看法。我坚持认为:利用J2EE(尤其是EJB)很难开发出整洁、高性能的代码。另一方面,Pet Store基准本身就会导致更大的问题。

基准纷争过后,很多人借助于更平易且更简单的技术来实现Pet Store.其中一种最强大且最简单的实现方法是Clinton Begin所使用的,他利用一个称为iBatis的DAO框架来代替全部的实体bean.Rod Johnson的团队将该应用程序转化为Spring,并且现在已经与Spring框架一起发布。以下是相关的一些细节:

Spring jPetStore应用程序包含在M4或更高版本的Spring中。

它是一种具有JDBC DAO层的数据驱动的应用程序。

它提供了Strut的替代前端以及Spring MVC框架。

它提供了两种不同的模型。最简单的模型使用单一数据库和简单JDBC事务。另一种模型可以跨多个数据库使用JTA事务治理。

在下面的部分中,我将演示具有MVC web前端和单个数据库中的简单事务的应用程序版本。我将重点讨论域模型、单数据库DAO层、单一事务以及Spring MVC前端。Spring网站上提供了大量的资源,可供希望深入研究的开发人员使用。

配置文件

了解Spring应用程序应当从配置文件开始,它显示了主要的bean以及应用程序如何将它们组合在一起。Spring配置文件在应用程序上下文中定义bean.将上下文看作是收集应用程序指定资源的一种便利方式。

很多J2EE应用程序借助单元素来了解诸如连接之类的应用程序资源。这种用途的单元素与很多Java开发人员经常使用的全局变量差别不大。J2EE中的替代方案是一种称为JNDI的目录服务,但是对于许多常见用例来说它就是杀鸡的牛刀了。而Spring使用一种应用程序上下文。最初,需要在一个简单的XML文件中指定应用程序上下文,尽管也可以通过扩展Spring来接受其它类型的配置文件。以下是应用程序上下文中可能会包含的内容:

数据源

治理连接的Java类,通常在一个池中。

DAO层

假如应用程序使用了数据库,那么很可能需要隔离对DAO层数据库的访问。可以通过应用程序上下文来访问该层。

持久性治理器

每个持久性框架都有一个应用程序用来访问其特性的对象或工厂。对于Hibernate来说,它就是会话和会话工厂。而对于JDO来说,它就是持久性治理器工厂和持久性治理器。

事务策略

可以显式地声明希望在事务中使用的方法以及用于实施该策略的事务治理器。

事务治理器

J2EE中有很多不同的事务治理策略。对于单一数据库的应用程序,Spring答应使用数据库的事务治理。对于多个数据库或事务源,Spring答应使用JTA.可以将事务治理器保存在应用程序上下文中。

验证逻辑

Spring框架使用一种与Strut类似的验证框架。Spring答应像配置其他业务组件那样配置验证逻辑。

视图和控制器

Spring框架答应为视图指定控制器,并帮助用户通过控制器来配置导航路径。

jPetStore应用程序使用包含一个数据源、DAO层和一种事务逻辑的Spring应用程序上下文。用户定义XML文档中上下文的内容,该XML文档列出了一系列bean.每一个XML配置文件都包含一个题头,其后是一系列组件和一个脚注。如下所示:

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有