AOP背景:
把我们某个方面的功能提出来与一批对象进行隔离,这样与一批对象之间的耦合度就降低了,就只需要对某个功能进行编程。例如android中的登陆权限问题,只需要在特定的方法加入我们的登陆切点,在不改变业务逻辑的情况下可以变更我们判断登录 的业务逻辑,这样就达到了松耦合的目的,在编译成.class时注入.
如果说,OOP是把问题划分到单个模块的话,那么AOP就是把涉及到众多模块的某一类问题进行统一管理.
Android AOP就是通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,提高开发效率
什么是面向切面编程?
在运行期间,动态的将代码块切入到特定的类、代码块的编程思想就是面向切面编程
特点:1、针对同一类问题统一处理
2、无侵入添加代码
AOP用途
AOP可用于日志埋点、性能监控、动态权限控制、甚至是代码调试等等
AOP应用之Java Aspect
基础知识
AspectJ
是一个面向切面编程的框架,他扩展了java语言所以他有一个专门的编译器用来生成遵循java字节码规范的Class文件
Aspect:切面 [切入指定类、指定方法的代码块称为切面]
Pointcut:切点 [切入到那些类、哪些方法则称为切点]
Around:处理
joinPoint(连接点):[aspectJ中的ProceedingJoinPoint]和方法有关的前前后后都是连接点
Advice: 一种hook,要插入代码的位置
Before pointcut之前;After pointCut之后; Around pointCut之前之后执行
exccution() 切入点函数
注解:
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.SOURCE)
public @interface Override {
}
定义一个注解都要包含 @Target @Retention
@Target 标识运用在哪里(是方法/类/....)
public enum ElementType {
/** Class, interface (including annotation type), or enum declaration */
TYPE,
/