代码改变世界

AOP

2019-04-24 11:38  般若Android  阅读(281)  评论(0)    收藏  举报

  AOP的概念

  AOP为Aspect Oriented Programming的缩写。意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术

  .aop是oop的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范性,利用Aop可以对业务逻辑的的各个部分进行隔离,从而使业务逻辑之间的耦合度降低,提高程序的可重用性,提高开发效率

  项目场景

  Aop实现方式

  aop仅仅只是个概念,实现它的方式(工具和库)有以下几种

  AspectJ:一个javaTM语言的面向切面编程的无缝扩展(适用于Android)

  Javassist for android:用于字节码操作的知名java类库

  DexMaker:Dalvik虚拟机上,在编译期或者运行时生成代码的javaAPI

  ASMDEX:一个类似ASM的字节码操作库,运行在android 平台,操作dex字节码

  引入方式

 

 

  AOP基本知识

  1.通知、增强处理(Advice):就是你想要的功能,

  2.连接点(JoinPoint):允许你通知的地方,

  3.切入点(Pointcut):上面说的连接点的基础上,来定义切入点,你的一个类里有15个方法,那就有十几个连接点,但是你并不想在所有方法上都使用通知,那么就用切入点来定义几个方法,让切入点筛选连接点

  4.切面(Aspect):切面是通知和切入点的结合

  5.织入(Weaving):把切面应用到目标对象来创建新的代理对象的过程

  Aop注解与使用

  @Aspect:声明切面,标记类

  @Pointcut(表达式):定义切点,标记方法

  @Before(..):前置通知

  @Around(..):环绕通知切点前后通知

  @After(..)切点之后通知

  @AfterReturning()返回通知,切点方法返回结果之后执行

  @AfterThrowing()异常通知:起点抛出异常时执行

    需要在切面类 中使用 即在使用@Aspect的类中

  切点表达式

  execution(<修饰符模式>? <返回类型模式> <方法名模式>(<参数模式>) <异常模式>?)

  除了返回类型模式 方法名模式 和参数模式外 其他项都是可选的

  

  @Pointcut的使用

  @Pointcut是专门用来定义切点的,让切点表达式可用

  

 

 

  注意:通用

  

  @Point()是可复用的表达式 之后调用type()就是要操作的切点

  @Before @After不具有拦截方法的功能 @Around具有拦截功能 其只有@Around 方法参数为ProceedingJoinPoint 切只有调用。proceed才会释放拦截

  其他参数为JoinPoint point

  获取注解值

Aop只操作方法 注解都可操作

 

 

获取外层对象 可能为Activity

 位置 D:\AopMyDemo\app\src\main\java\com\example\muheda\aopmydemo