AspectJ开发
主流的AOP框架有2个:Spring AOP、AspectJ。
Spring AOP使用纯Java实现,不需要专门的编译器和类加载器。
AspectJ是基于Java语言的AOP框架,可以单独使用,也可以内嵌到Spring AOP中。单独使用需要专门的编译器、类加载器。
这里介绍如何单独使用AspectJ。
下载AspectJ
1、搜素aspectj,找到这个
2、
3、最新稳定的发布版
4、选择最近的镜像下载
至此,得到一个aspectj的jar文件。
安装AspectJ
1、命令行下执行
java -jar C:\Users\chy\Downloads\aspectj-1.9.4.jar
此句代码是运行这个jar文件,安装AspectJ。如果之前没在Path环境变量中添加jdk\bin的路径,需要先cd到jdk\bin所在目录,jar包的路径要使用自己的。
2、检查jdk路径是否正确
3、选择AspectJ的安装路径
4、目录结构如下
bin下的ajc是AspectJ的编译器(javac是java的编译器)。
lib目录如下
IDEA环境配置
1、插件中要安装
第一个是支持单独使用AspectJ,第二个是支持Spring AOP、在Spring中使用AspectJ。此处安装第一个就ok,但以后会用到第二个,我们一同安上。其实,实际项目中我们使用的基本都是第二个。
2、新建java项目
3、将lib下的aspectjrt.jar包添加到项目依赖中。注意这不是从官网下载得到的那个jar包。
4、设置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
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、运行,控制台输出如下
正在检查权限
权限已够
正在添加用户
添加用户成功
正在记录日志
已记录日志
相关文章