全球旧事资料 分类
AOP(AspectOrie
tProgrammi
g),作为面向对象编程的一种补充,广泛应用于处理一些具有横切性质的系统级服务,如事务管理、安全检查、缓存、对象池管理等。AOP实现的关键就在于AOP框架自动创建的AOP代理,AOP代理则可分为静态代理和动态代理两大类,其中静态代理是指使用AOP框架提供的命令进行编译,从而在编译阶段就可生成AOP代理类,因此也称为编译时增强;而动态代理则在运行时借助于JDK动态代理、CGLIB等在内存中“临时”生成AOP动态代理类,因此也被称为运行时增强。
AOP的存在价值
在传统OOP编程里以对象为核心,整个软件系统由系列相互依赖的对象所组成,而这些对象将被抽象成一个一个的类,并允许使用类继承来管理类与类之间一般到特殊的关系。随着软件规模的增大,应用的逐渐升级,慢慢出现了一些OOP很难解决的问题。我们可以通过分析、抽象出一系列具有一定属性与行为的对象,并通过这些对象之间的协作来形成一个完整的软件功能。由于对象可以继承,因此我们可以把具有相同功能或相同特性的属性抽象到一个层次分明的类结构体系中。随着软件规范的不断扩大,专业化分工越来越系列,以及OOP应用实践的不断增多,随之也暴露出了一些OOP无法很好解决的问题。现在假设系统中有3段完全相似的代码,这些代码通常会采用“复制”、“粘贴”方式来完成,通过这种“复制”、“粘贴”方式开发出来的软件如图1所示。
图1多个地方包含相同代码的软件
f看到如图1所示的示意图,可能有的读者已经发现了这种做法的不足之处:如果有一天,图1中的深色代码段需要修改,那是不是要打开3个地方的代码进行修改?如果不是3个地方包含这段代码,而是100个地方,甚至是1000个地方包含这段代码段,那会是什么后果?为了解决这个问题,我们通常会采用将如图1所示的深色代码部分定义成一个方法,然后在3个代码段中分别调用该方法即可。在这种方式下,软件系统的结构如图2所示。
图2通过方法调用实现系统功能
f对于如图2所示的软件系统,如果需要修改深色部分的代码,只要修改一个地方即可,不管整个系统中有多少地方调用了该方法,程序无须修改这些地方,只需修改被调用的方法即可通过这种方式,大大降低了软件后期维护的复杂度。对于如图2所示的方法1、方法2、方法3依然需要显式调用深色方法,这样做能够解决大部分应用场景。但对于一些更特殊的情况:应用需要方法1、方法2、方法3彻底与深色方法分离方法1、方法2、方法3无须r
好听全球资料 返回顶部