大音希声、大象无形

Java企业级应用软件开发探讨

AOP能干什么?

AOP是一个什么概念呢?

AOP是Aspect Oriented Programming的缩写,翻译成中文就是面向方面编程。它是最近几年流行起来的另一种编程方式。

  • 首先,AOP只是OOP的补充,换句话说,Procedure Oriented Programming的工程是很难,也是几乎不可能使用AOP的。
  • 其次,AOP是对OOP系统的纵向切割,从另一个方面上实现了系统解耦
  • 再次,AOP给OOP提供了另一种重用的可能。

对于OOP系统而言,系统的解耦主要依赖分层和良好的设计,一般良好的OOP架构没有不采用分层和设计模式的(当然,分层分得恰当不恰当、模式用得好不好,跟框架的设计者有着直接的关系)。但是,对于OOP系统而言,它只能到达这一步了。

对于系统的必须要求,比如日志、错误跟踪、访问拦截、权限控制等操作,OOP就很难达到八面玲珑。

其实,倒不是OOP一定不能实现上述功能的分离和重用,但是由于那又需要更高层次的抽象和封装,凭空增加系统的复杂性和使用难度,又不利于版本控制和发布控制,一般来说,是得不偿失的。

所以,很多开源项目比如Commons Logging等应运而生,它们的存在从一定的意义上解决了这个问题。

但是,还有一种很好的解决方案,那就是AOP(实际上AOP就是为了解决这种问题而诞生的)。

AOP既然是OOP系统的纵向切割,那么它就应该具备以下几点:

  1. 切入点(Point Cut):它需要一个点来切入到OOP系统中去,目前流行的AOP框架都采用从方法切入的方式。
  2. 切面(Advice):切入之后,它要做些什么呢?必须可以有一种方式进行定制,目前流行的AOP框架都采用Java代码实现的方式
  3. 重用性:一般来说,AOP能带来的重用一般都是Advice描述文件的重用,目前所有的AOP的Advice都是Java的Class文件,这就提供了一种可能,所有的Advice都可以通过打包成Jar的形式实现重用。

由此可以看出,使用AOP能够带来的好处是提供了一种抽象模型的方式、一种重用以前工作的方式(在不更改过去的代码的基础上添加新的功能、同时也可以重用过去写的Advice)。

AOP还有一个好处,就是减少工作量。

因为目前流行的AOP框架的PointCut定义一般都支持通配,这样就可以实现批量定义和修改。如果代码有着良好的规范、在良好的设计下,开发和维护工作量的减少会非常可观。而且对于添加新的功能不必修改原有的架构设计,从另一方面也降低了非常可观的工作量。

那么AOP在JavaEE企业级应用中能够起什么作用呢?

  1. 事务控制:很多业务逻辑方法都需要事务控制,通过通配实现事务控制绝对是一个节省工作量的好办法,如果再结合IOC更加可以脱离事务控制的依赖,实现事务控制灵活更换,提高了业务系统的重用性
  2. 权限控制:权限控制到底算不算业务逻辑?如果不算,为什么还要体现在业务逻辑中?通过AOP的方式,可以灵活的实现FilterChain机制,而业务逻辑的代码可以对其毫无察觉。
  3. 持久层对象的装饰和过滤:可以根据需要对持久层操作返回的结果进行装饰和过滤,甚至替换,而对系统架构没有任何要求。这是最漂亮和最干净的做法。
  4. 系统级别诊断日志:实现可插拔式系统级别日志,这样在系统正常运行后就可以为了提高系统性能而不费事的去掉它却不会影响到系统的稳定。
  5. 业务级别高级抽象:比如可以把工作流支持API封装,通过AOP的机制实现Mixin,这样就可以实现工作流支持和原业务逻辑分离,可以分开进行管理,也可以在更高的抽象级别上实现重用。

AOP也不是没有缺点,它本身就有一定的学习曲线,而且目前为止有具体意愿的好的实践并不多,而且它也会给你的工程带来复杂性,它还会给你的代码增加理解的难度(不管你承认不承认,代码阅读的难度确实是跟代码的耦合程度反相关的——虽然这是设计模式所力图解决的问题)

但是,目前来看适当的使用AOP,给你的项目提高灵活性和可维护性,是值得的。

posted on 2006-03-27 17:46 guitarpoet 阅读(1661) 评论(1)  编辑  收藏 所属分类: 综述

Feedback

# re: AOP能干什么? 2008-08-12 09:41 gfdsfgdjs

自立更生 自己想!  回复  更多评论   


只有注册用户登录后才能发表评论。


网站导航: