AOP面向切面思想

1人阅读 评论(0) 收藏 举报
分类:

 本文转载于其他大神,旨在帮助还没有理解AOP的童鞋看透弄懂AOP,也欢迎高手批评指正。

先说一个Spring是什么吧,大家都是它是一个框架,但框架这个词对新手有点抽象,以致于越解释越模糊,不过它确实是个框架的,但那是从功能的角度来定义的,从本质意义上来讲,Spring是一个库,一个Java库,所以我个人觉得应该这样回答Spring是什么:Spring是一个库,它的功能是提供了一个软件框架,这个框架目的是使软件之间的逻辑更加清晰,配置更灵活,实现这个目的的手段使用AOP和IoC,而AOP和IoC是一种思想,是一种什么样的思想呢,等下细说,先说AOP在Java里是利用反射机制实现(你也可以认为是动态代理,不过动态代理也是反射机制实现的,所以还是先不要管动态代理,我们这里化繁为简,不让它干扰咱们对AOP的理解),如何使用AOP呢,很简单滴,等下介绍。

下面先说AOP是什么样的思想,我们一步一步慢慢来,先看一下传统程序的流程,比如银行系统会有一个取款流程

我们可以把方框里的流程合为一个,另外系统还会有一个查询余额流程,我们先把这两个流程放到一起:

有没有发现,这个两者有一个相同的验证流程,我们先把它们圈起来再说下一步:

有没有想过可以把这个验证用户的代码是提取出来,不放到主流程里去呢,这就是AOP的作用了,有了AOP,你写代码时不要把这个验证用户步骤写进去,即完全不考虑验证用户,你写完之后,在另我一个地方,写好验证用户的代码,然后告诉Spring你要把这段代码加到哪几个地方,Spring就会帮你加过去,而不要你自己Copy过去,这里还是两个地方,如果你有多个控制流呢,这个写代码的方法可以大大减少你的时间,不过AOP的目的不是这样,这只是一个“副作用”,真正目的是,你写代码的时候,事先只需考虑主流程,而不用考虑那些不重要的流程,懂C的都知道,良好的风格要求在函数起始处验证参数,如果在C上可以用AOP,就可以先不管校验参数的问题,事后使用AOP就可以隔山打牛的给所有函数一次性加入校验代码,而你只需要写一次校验代码。不知道C的没关系,举一个通用的例子,经常在debug的时候要打log吧,你也可以写好主要代码之后,把打log的代码写到另一个单独的地方,然后命令AOP把你的代码加过去,注意AOP不会把代码加到源文件里,但是它会正确的影响最终的机器代码。

现在大概明白了AOP了吗,我们来理一下头绪,上面那个方框像不像个平面,你可以把它当块板子,这块板子插入一些控制流程,这块板子就可以当成是AOP中的一个切面。所以AOP的本质是在一系列纵向的控制流程中,把那些相同的子流程提取成一个横向的面,这句话应该好理解吧,我们把纵向流程画成一条直线,然把相同的部分以绿色突出,如下图左,而AOP相当于把相同的地方连一条横线,如下图右,这个图没画好,大家明白意思就行。

    

这个验证用户这个子流程就成了一个条线,也可以理解成一个切面,aspect的意思我认为是方面,你用什么实物去类比,只要你能理解都可以。这里的切面只插了两三个流程,如果其它流程也需要这个子流程,也可以插到其它地方去。

 

转载自:https://my.oschina.net/yanquan345/blog/203415

 

查看评论

轻松理解AOP(面向切面编程)

Spring如此流行,当我第一次接触Spring的时候,到网上看了一些文章,都讲得神乎其乎,最后我篇也没看懂,我当时就是认为这个东西一定很高深,于是我就遇到做WEB开发的人就会打听一下。得到最多的一个...
  • yanquan345
  • yanquan345
  • 2014-02-24 20:47:59
  • 7488

AOP面向切面编程思想的原理(简单理解)

阅读本文章的前提:java基础,具备java面向对象思想 深入学习需要了解知识点:jdk 静态代理,动态代理,java继承,多态,接口 AOP:面向切面编程思想是继OOP面向对象编程思想后...
  • kouryoushine
  • kouryoushine
  • 2017-08-23 11:49:48
  • 271

简述Yii2里的AOP思想

AOP是什么 在软件业,AOP为Aspect Oriented Programming的缩写,意为: 面向切面编程 ,通过 预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。 AOP解决...
  • guiyecheng
  • guiyecheng
  • 2017-02-20 17:42:44
  • 704

thinkphp AOP(面向切面编程)

AOP: 在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP是OOP的...
  • jiaHey
  • jiaHey
  • 2016-07-16 20:12:16
  • 2826

iOS面向切面编程-AOP

1. AOP简介 AOP: Aspect Oriented Programming 面向切面编程。   面向切面编程(也叫面向方面):Aspect Oriented Programming(AOP...
  • yidu_blog
  • yidu_blog
  • 2016-11-11 09:51:08
  • 1840

面向切面编程AOP 在iOS中的实现

AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。 我的理解就是将每个特定的对象需要执行...
  • yizhou1989126
  • yizhou1989126
  • 2015-09-16 17:49:24
  • 952

MVC过滤器-AOP思想初探

AOP:面向切面编程。“给程序统一添加新功能的一种思想”。 它是对传统OOP编程的一种补充。 OOP关注需求功能模块,封装良好的类,并让他们有属于自己的行为,侧重业务逻辑的实现。 AOP...
  • q646926099
  • q646926099
  • 2016-07-23 14:35:12
  • 678

.NET面向上下文、AOP架构模式(实现)

1.上下文Context、面向切面编程AOP模型分析 在本人的“.NET面向上下文、AOP架构模式(概述)”一文中,我们大概了解了上下文如何辅助对象在运行时的管理。在很多时候我们急需在运行时能把对象...
  • wangqingpei557
  • wangqingpei557
  • 2012-08-08 14:38:53
  • 5536

spring的IOC(控制反转)与AOP(面向切面编程)

一直对spring的两大特性IOC与AOP了解的模模糊糊,不知道怎么区分,怎么理解。 今天看了一篇讲spring常用注解的文章和spring AOP的文章,引用这两个作者的观点,感觉对这两个特性的了...
  • u013538390
  • u013538390
  • 2015-07-02 18:24:09
  • 2423

Spring框架运行机制(控制反转,依赖注入,面向切面AOP)

文章属于入门级水平,重要事情说三遍,入门级,入门级,入门级 Mybatis: 实现IOC的轻量级的一个Bean的容器 Inversion of control 控制反转:由容器控制程序之间的关系,...
  • fei641327936
  • fei641327936
  • 2016-07-24 17:34:54
  • 3179
    个人资料
    等级:
    访问量: 6037
    积分: 213
    排名: 34万+
    文章存档
    最新评论