• 软件测试技术
  • 软件测试博客
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试论坛
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘
    暂时没有公告

字号: | 推荐给好友 上一篇 | 下一篇

Spring Framework概述 (2)

发布: 2008-6-20 14:43 | 作者: 不详 | 来源: 测试时代编辑整理 | 查看: 93次 | 进入软件测试论坛讨论

领测软件测试网

假定你决定直接使用JDBC或Hibernate的事务来避免JTA的开销。一旦你需要与多个数据源打交道,你会不得不找出所有事务管理代码并用JTA事务来替换它们。这难道不具吸引力?这导致包括我在内的大多数J2EE开发者推荐只使用全局JTA事务,并用像Tomcat这样的简单Web 容器来有效管理事务程序。不管怎样,使用Spring事务抽象,你只要重新配置Spring来使用JTA,而不是JDBC或Hibernate的事务策略就可以了。这是一个配置的修改,不是代码变更。因此,Spring让你的应用程序能随意缩放。

AOP

从2003年起在企业关注问题上(例如一般使用EJB来做的事务管理)使用AOP解决方案大家有了很大的兴趣。

Spring的AOP支持的首要目标是为POJO 提供J2EE支持。Spring AOP能够在应用服务器之间移植,所以没有厂商绑定的风险。它可以工作在web 容器或者是EJB容器中,而且已被成功应用于WebLogic、Tomcat、JBoss、Resin、Jetty、Orion和其他很多应用服务器及web 容器上。

Spring AOP支持方法拦截。所支持的关键AOP概念包括:

拦截(Interception):自定义的行为能插入到任何接口和类的方法调用的前面或后面。这和AspectJ 术语中的“around advice”相近。

引入(Introduction):一个执行逻辑(advice)会导致一个对象实现额外的接口。这会引起继承混合。

静态和动态切入点:在程序执行过程中指定发生拦截的地方。静态切入点关注方法签名;动态关注点还能考虑被计算处的方法参数。切入点与拦截器分开定义,这使得一个标准拦截器可以被用在不同应用程序和代码上下文中。

Spring支持有状态的(每个执行逻辑对象一个实例)和无状态的(所有执行逻辑用一个实例)拦截器。

Spring不支持字段拦截。这是一个经过深思熟虑的设计决定。我总觉得字段拦截不符合封装原则。我更愿意认为AOP是OOP的一个补充而不是与它冲突。在5到10 年后,我们在AOP的学习曲线上走得更远了很自然地会觉得应该在应用程序设计的桌面上给AOP留个位置。(那时像AspectJ 这样的基于语言的解决方案会比今天更具吸引力。)

Spring用动态代理(需要存在一个接口)或运行时CGLIB字节码生成(这使得类的代理成为可能)来实现AOP。这两种方法能在任何应用服务器中运行,也能工作在独立环境中。

Spring是第一个实现了AOP联盟接口(www.sourceforge.net/projects/aopalliance)的AOP框架。这些代表了不同AOP框架的拦截器也许可以协同工作。

Spring集成了AspectJ,提供了将AspectJ 的方面无逢集成到Spring应用程序中的能力。从Spring 1.1 开始已经可以用Spring的IoC容器依赖注入AspectJ 的方面,就像任何Java 类一样。因此AspectJ 的方面可以依赖于任何Spring管理的对象。对即将到来的AspectJ 版本5 的集成更令人激动,基于注释驱动切入点,AspectJ 开始提供用Spring依赖注入任何POJO的能力。

因为Spring拦截的是实例级对象而不是类加载器级的,所以可以在同一个类的不同实例上使用不同的执行逻辑,或把未拦截的对象和已拦截的对象一起使用。

也许Spring AOP的常见用途是用于声明性事务管理。这构建于前面讨论过的事务抽象之上,并且可以用任何POJO 进行声明性事务管理。依靠事务策略,底层机制可以是JTA、JDBC、Hibernate或是其他任何提供事务管理的API。

以下是与EJB CMT的主要不同:

事务管理可以应用于任何POJO。我们建议业务对象实现接口,这只是一个好的编程习惯,不是由框架所强制的。

通过使用Spring的事务API在一个事务性POJO 中实现可编程的回滚。我们为此提供了静态方法,使用ThreadLocal变量,所以你不必传播一个类似EJBContext这样的上下文对象来保证回滚。

延伸阅读

文章来源于领测软件测试网 https://www.ltesting.net/


关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备10010545号-5
技术支持和业务联系:info@testage.com.cn 电话:010-51297073

软件测试 | 领测国际ISTQBISTQB官网TMMiTMMi认证国际软件测试工程师认证领测软件测试网