使用aspectj实现AOP

aspectj是java语言的一个AOP实现,aspectj不一定要在spring中使用,单独也可以用,本文通过一个简单的例子来说明如果通过独立使用aspectj来实现aop,本文不会介绍aop的相关概念,只给出一个简单的例子。

1. 下载安装aspectj

https://www.eclipse.org/aspectj/downloads.php
通过上面的网站下载aspectj的jar包,我下载的是aspectj-1.8.0.jar

2. 安装aspectj

下载好jar包后,在放jar的目录下打开命令行窗口,可以在目录下按shift+右键,选择“在此处打开Powershell窗口”来打开命令行窗口,如下图。
在这里插入图片描述
打开后输入如下命令,就会弹出安装窗口

java -jar aspectj-1.8.0.jar

安装过程基本一路next就可以,其中有一步如下图,让选择jre,一般会自动找到jre安装路径,如果没有找到,就手动选择一下。
在这里插入图片描述
安装完后的目录如下
在这里插入图片描述

3. 添加环境变量

其实上面安装过程的最后一步提示会将安装目录下的bin目录加到环境变量里,不过不知道为什么我的没有加进去,所以我就手动加了一下,就是在path环境变量里加上aspectj安装目录下的bin目录。这样我们就能在任意目录下使用ajc命令了(ajc命令是aspectj编译java文件的命令)
在这里插入图片描述

4. 创建测试类

创建如下3个测试类。其中AOPTest类是主类,用来进行代码测试,Hello类是待增强的类,一会我们要对这个类的say方法进行增强。
AuthAspect类是切面类,大家可能注意到这个类不是public class,而是public aspect,public aspect并不是java的语法,而是aspectj的语法,所以一会我们不能用javac来编译这些文件,而是用ajc命令来编译这些文件。

//主类,用于测试
public class AOPTest{
	public static void main(String[] args){
		Hello h = new Hello();
		h.say();
	}
}
//待增强的类
public class Hello{
	public void say(){
		System.out.println("Hello say hello");
	}
}
//切面类
public aspect AuthAspect{
	//before()说明这是一个前置增强
	//execution(* Hello.say())表明我们要增强Hello类的say()方法
	before(): execution(* Hello.say()){
		System.out.println("auth");
	}
}

5. 编译测试类

将上面三个测试类放在同一文件夹下,然后在此文件下打开命令行窗口,输入如下命令。
其中-d表示指定编译后生成的class文件放在哪里, -d . (-d加一点)表示我们把生成的class文件放在当前目录下。-cp指定classpath,因为我们要用到aspectj的jar来编译,所以指定一下classpath,aspectjrt.jar这个jar包就在aspectj安装目录下的lib目录下。*.java表示我们要编译此目录下所有以.java结尾的文件。
如果输入命令时提示找不到ajc命令,说明你环境变量没有添加正确,请检查一下环境变量配置。

ajc -d . -cp 'C:\aspectj1.8\lib\aspectjrt.jar' *.java

6. 测试

编译完成后,上面三个java文件会分别生成三个class文件,然后继续在命令行输入以下命令运行主类进行测试。
同样,我们运行时需要aspectjrt.jar,所以要指定一下classpath。注意这个classpath和上面指定classpath略有不同,就是要加上;.(分号+ 一点),不然运行时会提示找不到主类的错误(为什么要强调这个,因为我一开始就是忘了,搞得我找了好久的错误,气!)

 java -cp 'C:\aspectj1.8\lib\aspectjrt.jar;.' AOPTest

可以看到我们的say方法本来只输出Hello say hello,经过上面操作后在say之前先输出了auth,说明对say方法增强成功。
在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值