AOP入门

作者: 雅俗共赏M | 来源:发表于2017-03-30 09:38 被阅读113次

最近在看《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作为 织入器来完成织入

相关文章

  • Spring学习系列--3.AOP

    Spring Aop Aop面向切面编程 Aop入门动态代理 动态代理,其实与Aop的原理有些相似,可以用动态代理...

  • Spring AOP-基础使用

    零、本文纲要 一、了解AOP1、认识AOP2、AOP作用3、AOP核心概念 二、AOP快速入门1、基础准备2、AO...

  • Spring入门(二)之AOP实现原理

    Spring入门之AOP实现原理 一、什么是AOP? Aspect Oriented Programming(AO...

  • Spring学习手册(10)—— Spring AOP配置

    Spring学习手册(9)—— Spring AOP入门讲述了AOP技术以及AOP基本概念,最后我们了解了Spri...

  • 移动架构<第五篇>:AOP架构设计

    Android之AOP架构<第一篇>:入门Android之AOP架构<第二篇>:按钮防抖Android之AOP架构...

  • AOP入门

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

  • 一文读懂 AOP | 你想要的最全面 AOP 方法探讨

    前前言 相信大家在入门 AOP 时,常常被繁多的术语、方法和框架绕晕。AOP 好像有点耳熟?Javaseopt 是...

  • Android之AOP面向切面编程

    这篇博客只是本人在Android进阶学习中AOP面向切面编程的学习笔记,适合入门级选手,如果想深入了解AOP面向切...

  • Spring AOP入门

    Spring的核心有两部分,IOC和AOP,那么AOP的重要性可想而知,今天一块来了解下Spring AOP相关的...

  • AOP入门介绍

    概念 AOP(Aspect Oriented Programming)简而言之就是面向切面编程。它所要实现的目标就...

网友评论

    本文标题:AOP入门

    本文链接:https://www.haomeiwen.com/subject/xrsuottx.html