AOP入门

最近在看《Spring揭秘》里面AOP部分,利用最近两三天的上班空余时间来简单总结一下吧。

  1. AOP是什么
  1. AOP的实现
  2. AOP在Java上的实现
  3. AOP织入器

AOP是什么?

AOP全称"Aspect-Oriented Programming",意为面向切面编程。使用AOP,我们可以对类似于Logging和Security等系统需求进行模块化的组织,简化系统需求与实现之间的对比关系,进而使得整个系统的实现更具有模块化

所以说,个人理解AOP其实算一种开发思想,在我们的软件开发中,通过引入所谓切面的概念来将日志记录,权限控制等一些与业务逻辑关系不算太大的其他逻辑操作隔离开,从而使得业务逻辑和其余的逻辑各自能够更好地被组织,维护,更具有模块化。

AOP的实现

AOL

AOP是一种理念,需要一种方式来实现该理念。那么实现AOP的语言就成为AOL,即Aspect-Oriented Language。那么AOP都有哪些语言实现方式呢?

  • AspectJ(Java)
  • AspectC
  • AspectC++
  • Aspect.Net
  • AspectL(Lisp)
  • AspectPHP

基本实现原理

  1. 静态AOP

以AspectJ为代表,将实现后的Aspect编译并织入到系统的静态类中。比如,AspectJ会使用ajc编译器将各个Aspect以java字节码的形式编译到系统的各个功能模块中,以达到融合Aspect和Class的目的。

静态AOP的优点:

Aspect直接以Java字节码的形式编译到Java类中,Java虚拟机可以像通常一样加载Java类运行,不会对整个系统的运行造成任何的性能损失。

缺点:

灵活性不够。如果切点需要个改变,则需要重新修改代码,重新编译织入到系统中。

  1. 动态AOP

动态AOP的织入过程在系统运行开始之后进行,而不是预先编译到系统类中,而且织入的信息大都采用外部XML文件格式保存,可以在调整织入点以及织入逻辑单元的同时,不必变更系统其他模块,甚至在系统运行的时候,也可以动态地更改织入逻辑。

动态AOP的代表有JBoss AOP、Spring AOP等框架。

AOP在Java上的实现

1. 动态代理

2. 动态字节码增强

3. 自定义类加载器

4. Java代码生成

5. AOL扩展

AOP中的关键字

  • Joinpoint: 代表要织入到系统中的执行点。

    常见的织入点有: 方法调用、方法执行、构造方法调用、构造方法执行、字段设置、字段获取、异常处理执行、类初始化(静态类型、静态块)。

  • PointCut: 代表的是Joinpoint的表述方式,描述要在哪些地方进行Joinpoint的织入。

    PointCut的表述方式有哪些: 正则表达式(普遍用法)、直接指定Joinpoint所在方法名称、使用特定的PointCut表达语言。

  • Advice: 代表将会织入到Joinpoint的横切逻辑。

Advice在Joinpoint位置执行时机的差异或者完成功能的不同,可以分为多种具体形式:Before Advice、After Adivce、After returning Advice、After throwing Advice、After Finally Advice、Around Advice、Introduction。

  • Aspect: 代表对系统中的横切关注点逻辑进行模块化封装的AOP实体概念

AOP织入器

需要将我们之前定义好的那些横切逻辑织入到原来的业务代码中,就需要用到一个叫织入器的东西

常见织入器有:

  • AspectJ 技术的ajc织入器
  • JBoss AOP 采用自定义类加载器作为织入器来完成织入
  • Spring AOP 将ProxyFactory作为 织入器来完成织入
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,332评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,508评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,812评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,607评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,728评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,919评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,071评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,802评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,256评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,576评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,712评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,389评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,032评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,026评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,473评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,606评论 2 350

推荐阅读更多精彩内容