【AOP 面向切面编程】Android Studio 使用 AspectJ 监控方法运行原理分析
【摘要】
文章目录
一、查看使用 AspectJ 后生成的 Class 字节码类二、AspectJ 的本质
一、查看使用 AspectJ 后生成的 Class 字节码类
在 ...
一、查看使用 AspectJ 后生成的 Class 字节码类
在 Android Studio 中查找编译的 MainActivity 字节码文件 , 最终在 Y:\002_WorkSpace\001_AS\AOP_Demo\app\build\intermediates\javac\debug\classes\com\example\aop_demo 目录下找到 MainActivity.class 文件 ;
字节码文件内容 :
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//
package com.example.aop_demo;
import android.os.Bundle;
import android.view.View;
import androidx.appcompat.app.AppCompatActivity;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.runtime.reflect.Factory;
public class MainActivity extends AppCompatActivity {
public MainActivity() {
}
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.setContentView(2131427356);
}
@Monitor("textClick")
public void textClick(View view) {
JoinPoint var3 = Factory.makeJP(ajc$tjp_0, this, this, view);
textClick_aroundBody1$advice(this, view, var3, MonitorAspect.aspectOf(), (ProceedingJoinPoint)var3);
}
static {
ajc$preClinit();
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
二、AspectJ 的本质
Java 源码 通过 javac 编译器 编译后得到 Class 字节码文件 ;
AspectJ 也是一个编译器 , AspectJ 编译 Java 代码时 , 加入了 AOP 相关代码 ;
在 Gradle 配置中 , 也配置了 Java 编译器相关配置项 ;
JavaCompile javaCompile = variant.javaCompile
javaCompile.doLast {
String[] args = ["-showWeaveInfo",
"-1.8",
"-inpath", javaCompile.destinationDir.toString(),
"-aspectpath", javaCompile.classpath.asPath,
"-d", javaCompile.destinationDir.toString(),
"-classpath", javaCompile.classpath.asPath,
"-bootclasspath", project.android.bootClasspath.join(File.pathSeparator)]
log.debug "ajc args: " + Arrays.toString(args)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
完整配置参考 【AOP 面向切面编程】Android Studio 中配置 AspectJ ( 下载并配置AS中 jar 包 | 配置 Gradle 和 Gradle 插件版本 | 配置 Gradle 构建脚本 ) 博客 ;
文章来源: hanshuliang.blog.csdn.net,作者:韩曙亮,版权归原作者所有,如需转载,请联系作者。
原文链接:hanshuliang.blog.csdn.net/article/details/120424496
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)