AspectJ开发

 

主流的AOP框架有2个:Spring  AOP、AspectJ。

Spring AOP使用纯Java实现,不需要专门的编译器和类加载器。

AspectJ是基于Java语言的AOP框架,可以单独使用,也可以内嵌到Spring AOP中。单独使用需要专门的编译器、类加载器。

 这里介绍如何单独使用AspectJ。

 

 

 

下载AspectJ

1、搜素aspectj,找到这个

《AspectJ开发》

 

 

2、

 《AspectJ开发》

 

3、最新稳定的发布版

《AspectJ开发》

 

 

4、选择最近的镜像下载

《AspectJ开发》

至此,得到一个aspectj的jar文件。

 

 

 

 

安装AspectJ

1、命令行下执行

java -jar C:\Users\chy\Downloads\aspectj-1.9.4.jar

 

此句代码是运行这个jar文件,安装AspectJ。如果之前没在Path环境变量中添加jdk\bin的路径,需要先cd到jdk\bin所在目录,jar包的路径要使用自己的。

《AspectJ开发》

 

 

2、检查jdk路径是否正确

《AspectJ开发》

 

 

3、选择AspectJ的安装路径

《AspectJ开发》

 

 

4、目录结构如下

《AspectJ开发》

bin下的ajc是AspectJ的编译器(javac是java的编译器)。

 

lib目录如下

《AspectJ开发》

 

 

 

IDEA环境配置

1、插件中要安装

《AspectJ开发》

第一个是支持单独使用AspectJ,第二个是支持Spring  AOP、在Spring中使用AspectJ。此处安装第一个就ok,但以后会用到第二个,我们一同安上。其实,实际项目中我们使用的基本都是第二个。

 

 

2、新建java项目

 

3、将lib下的aspectjrt.jar包添加到项目依赖中。注意这不是从官网下载得到的那个jar包。

 

4、设置aspectj的编译器

《AspectJ开发》

 

 

《AspectJ开发》

ok,项目环境配好。

 

IDEA内置了ajc编译器,只需要提供lib下的jar包即可,其实我们可以简单粗暴地解压官网下载的jar,得到lib就可以。当然,这种方式不能得到ajc,就是说不能在命令行下编译aspectj,只能使用IDEA内置的ajc。

安装的这种方式,可以直接在命令行下使用ajc命令编译aspectj项目的java文件,当然也可以在IDEA中使用内置的ajc编译。

 

 

 

 

AspectJ项目示例

1、新建包user,包下新建类User

1 public class User {
2     public void addUser(){
3         System.out.println("正在添加用户");
4         System.out.println("添加用户成功");
5     }
6 }

 

 

 

2、新建包my_aspect,包下新建Aspect:MyAspect

《AspectJ开发》

 

 1 public aspect MyAspect {
 2     /*
 3     前增强。execution()的参数是一个函数原型,表示对所有满足这个函数原型的方法都进行增强。
 4     第一个*表示返回值可以是任何类型
 5     后面是函数名,包名.类名.函数名()的形式,第二个*表示可以是user包下的任何类,第三个*表示可以是任何方法
 6     括号里的2个..表示方法的参数表可以是任何数据类型、任何个数
 7     可以不使用通配符,显式指定也行
 8      */
 9     before():execution(* user.*.*(..)){
10         System.out.println("正在检查权限");
11         System.out.println("权限已够");
12     }
13 
14     /*
15     后增强
16     我们显式指定返回值是void类型,显式指定类、方法,无参数
17      */
18     after():execution(void user.User.addUser()){
19         System.out.println("正在记录日志");
20         System.out.println("已记录日志");
21     }
22 }

 

也可以使用其他的通知方法,这些方法名都是预定义的,不能随意修改。

注意自定义的标识符,比如包名、类名不能使用aspectj的关键字,上面红字aspect就是一个aspectj的关键字。

 

 

3、新建包test,包下新建测试类Test

1 public class Test {
2     public static void main(String[] args) {
3         User user=new User();
4         user.addUser();
5     }
6 }

 

 

 

4、运行,控制台输出如下

正在检查权限
权限已够
正在添加用户
添加用户成功
正在记录日志
已记录日志

 

点赞