谈谈对AOP的理解 一——认识AOP

     前几篇博客我们说了JAVA的代理模式,从静态代理到动态代理,又到CGLIB代理。从静态代理到动态代理是一种进步,JDK的动态代理和CGLIB的代理,却是各有优缺点,在使用过程中,不是非要决出个胜负,根据不同的情景,使用不同的代理;也可以根据情况,两者结合使用,代码是我们写出来的,我们才是创造者,知其然,知其所以然,然可用之。

      一、AOP

       这篇博客,我们说说java的AOP。之所以接着说AOP 是因为,我认为代理模式和AOP 本就是一家,AOP是一种很先进的思想,而这种思想的技术支撑是:动态代理。最初,我也没有发现他们的关系,后来走着走着,就从AOP学回到到动态代理了,发现,原来是AOP的实现机制之一就是有“动态代理”的支持。回归正题,我们先说说什么是AOP?

      AOP : Aspect Oriented Programming  面向切面编程。它是为解耦而生的。

      解耦是程序员编码开发过程中一直追求的境界。AOP在这方面给程序员带来的福音,在对业务类的隔离方面来说,它绝对是做到了解耦,但绝不是完美的解耦,这里在接下来的博客中再做介绍,这篇博客的主题是理解AOP。AOP的具体思想是:定义一个切面,在切面的纵向定义处理方法,处理完成之后,回到横向业务流,找一个简单的业务为例来说:

       从图中看出,AOP对我们的业务的纵向走势不会造成阻碍作用,所以所面向切面变成是对面向对象编程的一种补充。上图是简单的一个AOP横向逻辑切入业务逻辑纵向逻辑的一个直挂展示,有些人会问?为什么要这样做?我们有那么多的横切行的必要吗?现在我们看看使用AOP可以帮助我们避免那些问题?基本算是AOP的一个由来吧。

      先来看第一个问题,aop解决了大量的代码重复。

      我需要做一个日志的功能,即需要在每条线上都进行日志的处理,我们是不是要这么写?



     这样有很多条线中都包含了一段相同的代码,你怎么看?抽出来呗,作为公共的部分,被调用。

         然后呢,到这里我们还没有结束,为什么这么说?

         这样每个方法都和这个公共的功能类有关联关系,这里只是我们的抽出公共代码,解决了代码重复。我们需要做的是“解耦”,将业务类和这个公共的功能类之间的耦合解开,在运行的时候动态的给切入到每个运行的业务类中,那么怎么实现呢?

        AOP实现业务和切入类的解耦。

       AOP是如何实现的呢?借助动态代理。前几篇博客我们说了动态代理,动态代理的一个最大特征就是可以延迟对象的加载,即在运行期再确定调用者和被调用者的关系。AOP也就是利用了动态的这个特征来实现的解耦。具体我就不多说了,详情看代码

    

       AOP的主要应用

      直接上图吧。

     

     这张图也形象的展示了,软件的纵向业务发展,和软件的横向AOP切入的原理。我觉得以后,我们的开发可以更多的抽取这样的切面,让每个系统的开发只专注于核心的业务,而不考虑这样,那样的共性问题。

    下篇博客,我们说说AOP的相关知识。

     




  • 21
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 15
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值