阅读 87

AspectJ (Aop)面向切面编程

AspectJ(Aop)的使用想法

最近在阅读其他人的博客的时候,对AspectJ的出现感觉太好使,它作为SpringBoot的全家桶中一员,可以给Java后端同学打印日志等等功能都很方便,而且在实际代码编写中入侵性很少,而且Android项目也有java代码开发的完全可以使用AspectJ,关于一些方法的定位、耗时等等都很方便,最主要的是真的代码量很少,感觉很有意思

使用AspectJ(Aop)的原文

AspectJ(Aop)使用后具体细节

在看完上文使用Aop切面编程后,自己实际操作后发现,此方法不适用于有kotlin源码使用,否则在项目编译时,就无法通过,在java代码中使用后,在编译后,会在build-intermediates-classes-debug中看到通过静态编译后生成的标注方法的类,自定义的切面工具类,还有自定义的注解

使用自定义注解方法类 image.png

可以看到我们在编译项目的时候,通过AspectJ编译器,把使用自定义注解方法类,添加了静态代码块ajc$preClinit(),然后在可以看到在标注的方法中多出了调用before、around、after、afterReturning、afterThrowing这些方法

自定义切面类 image.png 在切面工具类中也自动生成静态代码块ajc$postClinit()和两个静态方法aspectOf()、hasAspect()

自定义注解

image.png

其中ajc$preClinit()通过反编译,发现初始化Factory,并把自定义的注解标记的方法中的能查出的关键的属性值传递进去

image.png

在调用test方法通过Factory.makeJp()方法获取节点,然后在调用TestAnnoAspect.aspectOf()方法中,静态代码块先初始化ajc$postClinit()

image.png

然后调用test_aroundBody1$advice()方法

image.png

所以关于使用AspectJ自定义注解,然后通过切面类去实现一些log、埋点等等功能非常方便

文章分类
Android
文章标签