AspectJ 是 eclipse 上托管的一个 AOP 的编程语言
快速入门
安装
- 在官方页面上下载 最新的安装包,目前是 aspectj-1.8.12.jar
- java -jar aspectj-1.8.12.jar,会出现提示页面,一路 NEXT 即可
- 配置环境变量 CLASSPATH 和 PATH
# aspectj1.8
export PATH=$PATH:/Users/abeffect/Green/AspectJ/aspectj1.8/bin
export CLASSPATH="/Users/abeffect/Green/AspectJ/aspectj1.8/lib/aspectjrt.jar:$CLASSPATH"
- 测试:aj, aj5, ajbrowser, ajc, ajdoc 命令均已可用
示例
- 安装目录下有 doc/examples/ 目录,进入此目录
- 执行 命令
ajc -argfile telecom/billing.lst
可以看到目录 doc/examples/telecom 下生成了一系列的 class 文件
运行示例
java -cp /Users/abeffect/Green/AspectJ/aspectj1.8/lib/aspectjrt.jar:. telecom/BillingSimulation
结果
... Billing simulation 2 ...
jim calls mik...
[new local connection from Jim(650) to Mik(650)]
mik accepts...
connection completed
jim hangs up...
connection dropped
Jim(650) has been connected for 201 seconds and has a bill of 603
Mik(650) has been connected for 201 seconds and has a bill of 0
Crista(415) has been connected for 0 seconds and has a bill of 0
mik calls crista...
[new long distance connection from Mik(650) to Crista(415)]
crista accepts...
connection completed
crista hangs up...
connection dropped
Jim(650) has been connected for 201 seconds and has a bill of 603
Mik(650) has been connected for 351 seconds and has a bill of 1500
Crista(415) has been connected for 150 seconds and has a bill of 0
通过 jadx 确认结果
jadx 是将二进制 class 文件反编译成 java 文件的反编译工具
mac 下安装 jadx
brew install jadx
使用
jadx-gui
通过 procyon 反编译
jdk8 的反编译工具,推荐 procyon
原理
ajc 是用 java 开发的一个 java 编译器,使用指定的 aspectj 文件来处理 java 源文件,编译成对应的 class 文件。
编译时加载 aspect
使用 ajc,来实现编译时加载 aspect
ajc 是类似于 javac 的编译工具
编译一个 aspect 和一个文件
ajc -d $DES_DIR MyClass.java MyAspect.java
编译器将产生两个.class 文件
编译一个 aspect 和一系列文件
建立 appname.lst 文件,内容如下
com/abeffect/MyClass.java
com/abeffect/MyAspect.java
com/abeffect/AnotherClass.java
com/abeffect/AnotherAspect.java
使用 ajc 编译
ajc -argfile appname.lst -d $DES_DIR
编译一个 aspect 和一个 jar 文件
假定 aspect 文件为 MyAspect.java, jar 文件为 myApp.jar。
下面的命令会使用 MyAspect.java 来处理 myApp.jar 中的每一个文件,结果 class 文件保存在 $DES_DIR 中
ajc -inpath myApp.jar path/to/MyAspect.java -d $DES_DIR
下面的命令会把结果保存在新的 jar 文件中
ajc -inpath myApp.jar path/to/MyAspect.java -outjar myNewApp.jar
运行时加载 aspect
使用 aj,来实现运行时加载 aspect
aj 类似于 java,是运行 jar 包的工具
命令示例
进一步阅读
- aspectJ 简单例子
- Android 基于 AOP 监控之——AspectJ 构建指南
- 从 Gradle 使用 Ant
- AspectJ Cookbook 中文版
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于