5.1 AOP基本思想

来源:互联网 发布:短网址生成算法 编辑:程序博客网 时间:2024/06/07 01:58

 

在第4章中,笔者通过事件传递的机制实现了日志的输出,其实Spring的AOP在这方面提供了更强大的功能。本章将首先让读者了解AOP的基本思想,然后通过对Java代理机制进行分析,引出AOP的3个关键概念,接着对Spring的AOP进行介绍,最后通过一个完整的实例让读者掌握Spring AOP的使用方法。

5.1  AOP基本思想

AOP的意思是面向方面编程,英文全称是Aspect Oriented Programming,它使开发人员可以更好地将本不该彼此粘合在一起的功能分离开。

5.1.1  认识AOP

开发人员在编写应用程序时,通常包含两种代码:一种是和业务系统有关的代码,一是和业务系统关系不大的代码,例如日志、权限、异常处理、事务处理等。以前编写代码时,这两种代码基本是写在一起的,这样在程序中,到处充满着相同或类似的代码,例如日志信息的输出,每个方法都要写日志的输出,不利于程序的维护。而AOP就是使这两种代码分离的思想。使用AOP,就不用在业务逻辑中实现与业务功能关系不大的代码,从而降低了两种代码的耦合性,达到易于维护和重用的目的。

AOP,从字面的意思来理解就是面向方面编程,但却容易让初学者一头雾水,很多资料也都对AOP进行过解释,但过多地从理论的角度进行讲解其实用性,这里不再多讲,仅用一个例子来说明:基本上每个方法都要用日志进行记录,那么如果按照面向对象的思路来说,就是每个对象都有记录日志这样一个行为。要在每个方法里添加日志的信息,必然会产生大量的重复代码,但可以将记录日志看作是一个横切面,所有对这些方法的调用都要经过这个横切面,然后在这个横切面进行记录日志的操作,这样就达到代码重用和易于维护的目的了,这就是AOP的思想。

5.1.2  AOP与OOP对比分析

OOP(面向对象编程)对现代编程产生了深远的影响,经过多年的发展,目前已日趋成熟,它能很好地解决软件系统中角色划分的问题,借助于面向对象的分析、设计和实现,开发人员可以将现实领域的实体转换成软件系统中的对象,从而很自然地完成从现实到软件的转换。但OOP并不是一种完美的思想,在某些方面,OOP也有其不足之处。比如在日志、事务处理、权限管理等方面,当应用OOP将这些内容封装为对象的行为时,会产生大量的重复代码,虽然通过一些方法可以减少这种重复,但却不能彻底地解决该问题,于是AOP出现了。前面讲过AOP能够降低代码的耦合性,使得代码易于维护和重用。一个应用程序分为核心关注点和横切关注点。核心关注点和具体应用的功能相关,而横切关注点存在于整个系统的范围内。

在AOP里,每个关注点的实现并不知道是否有其他关注点关注它,这是AOP和OOP的主要区别。在AOP里,组合的流向是从横切关注点到主关注点,而OOP中组合的流向则是从主关注点到横切关注点。从这点可以看出AOP和OOP它们所关注的对象是不同的,所以AOP可以和OOP很好地共存,AOP是OOP的有益补充,而不是其对立面。

5.1.3  AOP与Java的代理机制

AOP是一种思想,它和具体的实现技术无关。任何一种符合AOP思想的技术实现,都可以看作是AOP的实现。

JDK 1.3以后,Java提供了动态代理的机制。通过Java的动态代理机制,就可以很容易地实现AOP的思想。实际上Spring的AOP也是建立在Java的代理机制之上的。要理解Spring的AOP,先来了解Java的代理机制。下面主要通过一个输出日志的实例来使读者先了解Java的代理机制,从而引出AOP的几个关键点。

原创粉丝点击