一、AOP简介
1.1 AOP是啥
AOP(Aspect Oriented Programming):面向切面编程。
1.2 如何运作的
将业务逻辑中与类不相关的通用功能切面式的提取分离出来,让多个类共享一个行为,一旦这个行为发生改变,不必修改类,而只需要修改这个行为即可。
1.3 优缺点
相较于传统的OOP(面向对象编程)技术性能更优。
二、AspectJ
2.1 简介
AspectJ是一个实现了AOP的框架,它扩展了Java语言。AspectJ定义了AOP语法,它有一个专门的编译器用来生成遵守Java字节编码规范的Class文件。在程序编译过程中通过编译时技术将字节码文件中织入我们自己定义的切面代码。
注意:不管使用哪种方式接入AspectJ,都需要使用AspectJ提供的代码编译工具ajc进行编译
2.2 AspectJ三要素
(1)Pointcut(切入点)
告诉AspectJ需要在原来的业务逻辑中的哪个位置织入自己的代码
(2) Advice(通知)
你要在某个切入点织入的具体的代码的业务逻辑块。典型的 Advice 类型有 before、after 和 around,分别表示在目标方法执行之前、执行后和完全替代目标方法执行的代码。 除了在方法中注入代码,也可能会对代码做其他修改,比如在一个class中增加字段或者接口。
(3) Join Point(连接点)
程序中可能作为代码注入目标的特定的点,例如一个方法调用或者方法入口。
2.2 AOP和OOP代码比较
Aop统计方法执行时间,仅仅只需要添加注解即可,统计逻辑与业务逻辑分离,当需要统计的方法较多时代码维护性较好。
@ExecuteTime
public void getTime(){
new Thread(new Runnable() {
@Override
public void run() {
try {
//模拟方法执行耗时时长
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
}
OOP统计方法执行时间,业务逻辑和统计逻辑混淆在一起,当需要统计的方法较多,需要修改统计逻辑时,不利于维护。
public void getTime(){
long startTime = System.currentTimeMillis();
new Thread(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
long endTime = System.currentTimeMillis();
}
2.3 AOP应用场景
从上面OO