作者:小傅哥
博客:https://bugstack.cn
沉淀、分享、成长,让自己和他人都能有所收获!😄
话我放这,踩过的坑越多头发越少!
说来也是奇怪,只要是学编程的,从初次接触的 Java 到安装 JDK、IDEA、MYSQL, 再到接触 Spring、MyBatis、RPC、MQ,哪怕有时候在浅的坑也会跳进去尝尝鲜,一遍抓着头发,一手点着鼠标也几乎是你的常态。你的键盘里总是有很多被抓碎的头发!
但,哪怕是抓了这么头发,还是遇到了一个满脑子都是骚操作的小伙。“傅哥,我的切面怎么拦截不到?我是照着你的《SpringBoot 中间件设计和开发》专栏写的,你给我看看吧,我都弄了一天了”
接下来我带着大家一起看看什么是快乐星球,他是怎么一顿骚操作让切面拦截不到的!
上周,谢飞机(化名)发过来了自己的手撸的中间件源码,说这代码都没有啥怎么就不能切面呢?
看了几遍源码没发现问题,开始调试,还真它哈拉哨的不进这个切面,接下来;
DoJoinPoint
拷贝过来粘贴进去,噗察一下贴进去了,没提示替换,虽然有报错但两个类能共存,如下:DoJoinPoint
不是一个正经 Java 类,路径不对?有看不见的特殊字符?要不是IDEA把 .aj
这货显示成 C 类的图标,可能早就发现问题了。紧接着把这错误类的截图发给了谢飞机,问它你是怎么创建的?他说实话了
DoJoinPoint
时,看到一个 Aspect 的选项,以为这个就是创建切面的快捷操作,如图;.aj
结尾的类,并不是一个正经的 Java 类,所以切面不到,也根本没有对应的 class 文件。AspectJ,简称 AJ 我自己说的
AspectJ 其实也是 AOP 的一种实现技术,功能类似于拦截器,在集成在 IntelliJ IDEA 开发工具里。在使用 IntelliJ IDEA 编写 AspectJ 代码之前需要本机先安装 AspectJ 工具包。否则你的 .aj 类不能运行,同时IDEA类显示出来的 .aj 类,也是C的标识
接下来我们就来聊聊关于这个东西怎么使用,别再被 .aj 骗了。
在使用 AspectJ 之前,需要去官网下载一个安装包,地址:https://www.eclipse.org/aspectj/downloads.php 如果官网下载的很慢,可以从我提供的源码中获取,也可以从其他途径搜索下载 aspectj-1.9.4.jar
下载完成安装;
java -jar aspectj-1.9.4.jar
C:\aspectj1.9
,包括:bin、doc、lib等,后面我们就会使用到这些内容。在专业版 IDEA 中开发 AspectJ,需要安装以下两个插件:
开始之前需要在项目中添加 aspectjrt.jar
依赖,aspectjrt.jar
即 AspectJ 安装目录中lib
目录下的jar包。你可以复制到工程中引入,也可以直接引入
Project Structure
IDEA 默认使用 javac
编译器,这里需要配置 AspectJ 的编译器 ajc
,在 IDEA 中做相应配置。
C:\aspectj1.9\lib\aspectjtools.jar
创建 Aspect 类
public aspect DoAspect {
pointcut logPointcut():call(* ApiTest.hi(..));
void around():call(void ApiTest.hi(..)){
System.out.println("call 开始...");
proceed();
System.out.println("call 结束...");
}
before(): logPointcut(){
System.out.println("方法执行 before");
}
after(): logPointcut(){
System.out.println("方法执行 after");
}
}
测试类
public class ApiTest {
public void hi(){
System.out.println("Hi Aspect");
}
public static void main(String[] args) {
ApiTest apiTest = new ApiTest();
apiTest.hi();
}
}
测试结果
call 开始...
方法执行 before
Hi Aspect
call 结束...
方法执行 after
Process finished with exit code 0
与其他操作系统一样,Windows 10运行后会在后台运行许多服务,这些进程中的大多...
这里脚本之家推出了这些模板的第一部分——每个模板都是亲自挑选的,而且,我只...
文章目录 1.Servlet的作用 2.1 idea中搭建部署运行一个web项目 3.开发步骤 3.1 x...
春招总结 个人情况双非科班大三下、熟悉C、部分C#、unity自学一个月水平、计算机...
什么是索引 索引又可以称为键(key)是存储引擎用于快速找到记录的一种数据结构。 ...
sequence文件存储格式 1.txt 纯文本格式,若干行记录。默认用字符编码存储 2.Seq...
IT之家12月23日消息 据外媒 WindowsLatest 消息,微软专门为双屏 / 触控设备开发...
我使用的Springmvc,在controller层传输一个json到前台,后台显示没问题,中文正...
如果你真的把前几篇掌握了.实现ajax删除功能会易如反常.我所要教你的是.灵活...
1.什么是c语言 C语言是一门 面向过程 的 计算机编程语言 与 C 、 Java 等 面向对...