编程。
AOP实际是到合适的View组件。
业务逻辑模块就是实现业务 GoF(gang of four)设计模式的延续,设计模式孜孜不逻辑的Java类以及供Action调用的接口。
这些Ja— 倦追求的是调用者和被调用者之间的解耦,AOP可va类通过Hibernate穿过持久层映射到具体的数据 以说也是这种目标的一种实现。
库表。
ActionForm组件对象实现对表单数据的良好 软件系统通常由多个组件构成,每个组件负责封装,实现View和Model之间的相互支持。
SH架 一个特定的功能领域。
但是,这些组件也经常承担构图如图1所示。
它们的核心功能之外的额外责任。
系统服务(例如 日志、事务管理和安全性)经常发现自己跑到了别 的组件的领域里,而这些组件的核心职责是其他事 情。
结果就是所谓的“代码纠缠”,或者更简单点儿 说“一团糟”。
面向方面编程是一种试图解决这个 问题的编程技术,它把关注点的隔离提升为核心的 编程概念。
通过Spring的AOP,可以解决这个问 图1 SH架构图 题,并在每行代码中做更多的事情。
2.2 SSH架构 这是一个来自Hibernate访问数据对象的函数。
在SSH框架中,Struts负责表示层【6 J,其主要功 public List getReservations(){能为:管理用户的请求,做出相应的响应,提供一个 return流程控制器,委派调用业务逻辑和其他上层处理、处 getHibemateTemplate( ).find(”from Reser-理异常、用户界面的验证。
Spring用于业务层。
该 vation”);层借助了Spring,通过控制反转、AOP应用、面向接 }口编程,来降低业务组件之间的耦合度,增强系统扩 这里没有任何事务处理。
Spring允许建立配置展性。
Spring框架是一个分层架构,由7个定义良 代码去处理它。
不一定要通过Session来管理资源。
好的模块组成。
其中最重要的模块就是核心容器。
不一定写自己的配置。
不一定在这个层次上管理异 万 方数据 56 北京机械工业学院学报 第23卷常,因为这些异常是未经检查的。
可以自由地在最 B b=null: Public setB(B b){适当的位置去管理他们。
没用Spring的Hibernate方法的代码会是这样的: 1his.b=b: public List getBikesOldWay()throws Exception }{ Public do(){ List bikes=null; b.xxx: Session S=null; } try{ } 8=mySessionFactory.openSession(); 在这里,类A和类B是潜在运行时耦合的。
可 bikes=S.find(”from Bike”); 以用类C来替换到类B,而不会影响到类A。
bean } 自己不再负责对象的依赖关系,从而降低对象之间 catch(Exception ex){ 的耦合。
同时让开发者把精力放在业务逻辑的编写 //handle exception gracefully 上。
} 总结IoC的优点在于: finally{ 可以把一些参数的配置通过一个统一的IoC容 S.close(); 器来进行管理。
比如说一个发送邮件服务对象所需 } 要的SMTP服务器、用户名、密码之类的参数。
优点 return bikes; 是不用在类里进行硬编码,不会导致团队中每个开 } 发人员都有自己的配置文件,还有一个自己的配置 Spring可以使编程更快也更容易维护程序。
文件读取帮助类。
一个项目中,执行相同功能的类3.1.2依赖注入实现松耦合 有多个存在没有任何意义。
Java的设计理论中就提出了一条非常著名的原 在接口编程中,IoC帮消除了InterfaceA a=则,依赖倒转原则,其核心思想就是要将具体类之间 new Almpl();这样的代码。
也许将所有服务对象的的依赖,尽量转换成抽象依赖。
依赖注入其实也就 实例化操作都放在一个工具类(例如servicefactory)是所谓的IoC(inversion of contr01)中文译为反转控 中,然后通过这个工具类来进行服务对象的获取。
制。
其含义为:“不用你找,我来提供给你”。
通过 但当替换实现时还是需要改动你的代码。
假设一个下面两段代码来体现依赖注入和传统面向对象实例 模块在另一个项目中进行了复用,但复用的前提是化对象之间的差别。
你需要修改Almpl,这时候你愿意保存两份AImpl 传统的面向对象,对于对象的实例化和对象的 代码,针对不同的项目修改不同的Almpl,还是给另使用是由程序员来完成的。
一段简单的实例化代码 一个应用开发一个Almpl2,然后修改你的Service—是: Factory,保存两份ServiceFactory代码?我想你会选 Public class A{ 择使用IoC的配置文件方式的。
Public do(){ 方便测试。
对于传统编码来说,当出现Interfa- B b=new B(”l”);; ceA a=new AImpl();这样的代码的时候,有可能 } 你是无权访问和操作对象a的,这就不便于测试了。
} 而对于依赖注入而言,你可以进入到任何一个很难 这其中的依赖关系就导致了对象A需要负责 进入的类里进行测试。
对象B的创建,甚至是整个生命周期的管理。
这样 3.2 Spring的不足显然会带来耦合度高,不易维护的缺点,比如说,如 3.2.1 Spring的配置复杂果A类需要一个B(“2”)的话,还需要修改类A的 依据实际的开发经验,一般来说,所创建出的代码。
而且在这里类A和类B是编译时耦合的。
service对象应该少于依赖他们的其他对象。
当使用 而Spring的依赖注入,则是通过如下代码来获 了Spring框架之后。
只要我们的action对象需要依得类B的实例化对象: 赖到service的对象,就需要对其进行配置。
也就是 Public class A{ 说,假设我们创建需要100个service对象的1 000 万 方数据 第1期 57 王斯琼等:Spring在SSH架构中的作用和不足个action对象时,我们不得不对这1 000个bean进 了反转控制和面向方面编程的优点,以及指出了行配置。
Spring的配置文件太过臃肿和难以维护的诟病。
3.2.2 XML配置维护性差 且不说,XML配置有如何的复杂,它的维护性 参考文献:也很差。
你必须对你在配置中放了什么和如何放置 〔1〕石 磊,陈朔鹰.基于MVC设计模式的Struts十分的清楚。
否则将会导致整个系统的崩溃。
这 框架的研究〔J〕.微型电脑应用,2005,21(3):2点,对于Java新手和Spring新手来说,是一个噩梦。
—5因为你不得不一次又一次的审查配置文件。
当使用 〔2〕梁立新.项目实践精解:基于Struts-Spring—Hi-CVS(concurrent version system)来进行开发的时候, bernate的Java应用开发〔M〕.北京:电子工业这个问题将更加严重。
每个人都提交了属于自己的 .
上一篇:
网络视频点播系统
下一篇:
网络能耗监测系统管理端的研究与实现