本文转载自微信公众号“bugstack虫洞栈”,作者小傅。转载本文请联系bugstack公众号。目录1.前言2.满脑子风骚操作1.遇到的问题2.发现的问题3.排查问题3.如何正确使用Aspect的.aj类1.安装AspectJ2.AspectJ插件3.添加依赖aspectjrt.jar4.配置AspectJ编译器5.案例测试4,总结5,系列推荐1,前言就放在这里,踩的坑越多,发的越少!说来也奇怪,只要你是学编程的,从第一次接触FromJava到安装JDK、IDEA、MYSQL,再到接触Spring、MyBatis、RPC、MQ,甚至有时候在浅坑里,你都会跳尝试新事物。单手抓着头发点鼠标几乎是你的常态。您的键盘上总是有很多划伤的毛发!但是,就算你挠了挠这头发,你还是会遇到一个满脑子花样的家伙。付哥,我的段为什么不能截取?我是按照你的专栏《SpringBoot 中间件设计和开发》写的,大家给我看看,弄了一天,然后带大家看看什么是快乐星球,他是怎么秀操作的所以该部分无法拦截它!二、满脑子都是showoperation1、遇到一个问题上周谢继飞(化名)把自己手摇中间件的源码发过来,说这个代码里什么都没有为什么不能切分?一开始我粗心大意,让谢继飞发了一些代码截图。看截图中的代码,这和我写的中间件中的代码是一模一样的。没有问题,包路径也可以扫描。为什么不能剪脸?我说你打个断点调试一下,看看为什么不能断?哎,调试了一下,直接通过了,就是没砍。这时候我就想到了JDK版本,环境配置,Spring上下文,切面定义,包路径,这小子是不是忽悠了我?最后抱着这小子糊弄我,求源码。2.我发现了一个问题。看了好几遍源码没发现问题。我开始调试,但它真的没有进入这个部分。下一个;感谢您保留飞机的源代码并复制一个新的。我的目的是让他跑步和学习。接下来,我把我项目中的DoJoinPoint复制粘贴进去,勾选粘贴进去,也没有提示替换。虽然报错了,但是两个类竟然可以共存,如下:太神奇了。我怀疑不是所以DoJoinPoint不是正经的Java类,路径不对?有没有看不见的特殊字符?既然发现这个类不对,先把这行删掉。让程序先跑起来,保证除了这个类以外的其他内容没有问题,这样容易排查问题。还别说,去掉这个错误类,程序就可以正常运行了,section的内容被截取了。现在程序可以运行了,我想我可以看出问题出在哪里了。没想到刚打开一个文件夹,就发现了一个神奇的AJ!这个产品根本就不是Java类!图3.故障排除如果IDEA没有把.aj显示为C类图标,问题可能早就被发现了。紧接着,我把这个错误类的截图发给了谢集吉,问你是怎么创建的?他实话实说,谢集吉先说他偷懒,哈哈哈,让人觉得不好意思!他说在创建DoJoinPoint的时候,看到一个Aspect的选项,觉得这是创建切面的快捷操作,如图;创建完成后发现不对,不是class类型,是aspect,于是手动将aspect改成了class,于是,谢继飞实际上创建的是一个.aj结尾的aspect类,不是正经的Java类,所以没有section,也根本没有对应的class文件图片。3.如何使用Aspect的.aj类AspectJ,简称AJ。我说的AspectJ其实就是AOP的一种实现技术。其功能类似于拦截器,集成在IntelliJIDEA开发工具中。在使用IntelliJIDEA编写AspectJ代码之前,需要先安装AspectJ工具包。不然你的.aj类跑不起来,IDEA类显示的.aj类也是C的标志。接下来说说这个东西怎么用,不要再被.aj忽悠了。1.安装AspectJ在使用AspectJ之前,需要先去官网下载一个安装包,地址:https://www.eclipse.org/aspectj/downloads.php如果从官网下载很慢,你可以从我提供的源代码中得到它。也可以通过其他方式搜索下载aspectj-1.9.4.jar来下载并完成安装;双击安装命令安装java-jaraspectj-1.9.4.jar配置说明:不用配置,傻瓜直接下一步。在C盘会创建一个文件夹C:\aspectj1.9,里面有:bin、doc、lib等,我们后面会用到。2、AspectJ插件在IDEA专业版中开发AspectJ,需要安装以下两个插件:SpringAOP/@AspectJAspectJSupport3。添加依赖aspectjrt.jar开始前需要在项目中添加aspectjrt.jar依赖,aspectjrt.jar是AspectJ安装目录下lib目录下的jar包。可以复制到项目中导入,也可以直接导入。右击项目,点击OpenModuleSetting打开ProjectStructure,点击Libraries选项卡,上面的+号,新建一个NewProjectLibrary并选择C:\aspectj1.9\lib\aspectjrt.jar路径,点击即可完成配置4.配置AspectJ编译器IDEA默认使用javac编译器,这里需要配置AspectJ编译器ajc,在IDEA中进行相应配置。打开IDEA->File->Settings对话框,选择Build,Execution,Deployment->Compiler->JavaCompilerUsecomplier:选择Ajc,在Pathtoaspectjtools.jar5配置路径C:\aspectj1.9\lib\aspectjtools.jar。案例测试创建方面类publicaspectDoAspect{pointcutlogPointcut():call(*ApiTest.hi(..));voidaround():call(voidApiTest.hi(..)){System.out.println("调用开始...");proceed();System.out.println("调用结束...");}before():logPointcut(){System.out.println("方法执行前");}after():logPointcut(){System.out.println("Methodexecutionafter");}}测试类publicclassApiTest{publicvoidhi(){System.out.println("HiAspect");}publicstaticvoidmain(String[]args){ApiTestapiTest=newApiTest();apiTest.hi();}}测试结果调用开始...方法执行beforeHiAspectcall结束...方法执行afterProcessfinishedwithexitcode0至此才是打开Aspect类的正确方式,也可以尝试使用Aspect,本文只是介绍这种切面写法。4.综上所述,你的代码越粗、越大胆、越骚,遇到的问题就越多。可能是因为你没有遵循某些研发实施规范,所以你遇到的这些愚蠢的问题几乎会浪费你的早晨或一天。但有时候如果你能认真对待自己犯的bug,深入分析它是如何产生的,再复现一点点深入研究,说不定也会有意想不到的收获,说不定。因此,如果您是认真的,那么一切都没有错。关于切面、源码、开发,可能不仅仅着眼于功能实现,有时甚至会想办法逃避日复一日长不出来的工作内容。在那些有价值的技术上努力,你会收获最大。
