OOP&AOP
OOP(Object Oriented Programming):面向对象编程。把问题或功能模块化,每个模块处理自己的事。
AOP(Aspect Oriented Programming):面向切面编程。把分散于不同模块中的相同业务放到统一的地方来管理。如:日志记录,业务埋点,持久化,性能监控,数据校验,缓存,权限检查,异常处理等。
AspectJ简介
AspectJ定义了AOP语法,所以它有一个专门的编译器用来生成遵守Java字节编码规范的Class文件,在编译期注入代码。代表框架:Hugo(Jake Wharton)
基本概念
Join Points:连接点,程序中可切入的点。如:方法调用时,读取某个变量时
Pointcut:切入点,代码注入的位置,其实就是有条件限定的Join Point,例如只在特定方法中注入代码
Aspect:切面,一个关注点的模块化
Advice:在切入点注入的代码,一般有before、after、around三种类型
Target Object:被一个或多个aspect横切拦截操作的目标对象
Weaving:把Advice代码织入到目标对象的过程
Inter-type declarations:用来个一个类型声明额外的方法或属性
Demo示例
给方法添加性能测试
Java版本
1.添加依赖
Project->bulid.gradle
dependencies {
...
classpath 'org.aspectj:aspectjtools:1.8.13'
classpath 'org.aspectj:aspectjweaver:1.8.13'
}
Module->build.gradle
dependencies {
...
implementation 'org.aspectj:aspectjrt:1.8.13'
}
// 最后面添加即可
import org.aspectj.bridge.IMessage
import org.aspectj.bridge.MessageHandler
import org.aspectj.tools.ajc.Main
final def log = project.logger
final def variants = project.android.applicationVariants