【AOP 面向切面编程】Android Studio 使用 AspectJ 监控方法运行原理分析
生活随笔
收集整理的這篇文章主要介紹了
【AOP 面向切面编程】Android Studio 使用 AspectJ 监控方法运行原理分析
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 一、查看使用 AspectJ 后生成的 Class 字節碼類
- 二、AspectJ 的本質
一、查看使用 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();} }二、AspectJ 的本質
Java 源碼 通過 javac 編譯器 編譯后得到 Class 字節碼文件 ;
AspectJ 也是一個編譯器 , AspectJ 編譯 Java 代碼時 , 加入了 AOP 相關代碼 ;
在 Gradle 配置中 , 也配置了 Java 編譯器相關配置項 ;
JavaCompile javaCompile = variant.javaCompilejavaCompile.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)完整配置參考 【AOP 面向切面編程】Android Studio 中配置 AspectJ ( 下載并配置AS中 jar 包 | 配置 Gradle 和 Gradle 插件版本 | 配置 Gradle 構建腳本 ) 博客 ;
總結
以上是生活随笔為你收集整理的【AOP 面向切面编程】Android Studio 使用 AspectJ 监控方法运行原理分析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【AOP 面向切面编程】Android
- 下一篇: 【EventBus】EventBus 事