主流的AOP框架有2个:Spring AOP、AspectJ。java
Spring AOP使用纯Java实现,不须要专门的编译器和类加载器。框架
AspectJ是基于Java语言的AOP框架,能够单独使用,也能够内嵌到Spring AOP中。单独使用须要专门的编译器、类加载器。函数
这里介绍如何单独使用AspectJ。测试
一、搜素aspectj,找到这个spa
二、插件
三、最新稳定的发布版命令行
四、选择最近的镜像下载3d
至此,获得一个aspectj的jar文件。日志
一、命令行下执行code
java -jar C:\Users\chy\Downloads\aspectj-1.9.4.jar
此句代码是运行这个jar文件,安装AspectJ。若是以前没在Path环境变量中添加jdk\bin的路径,须要先cd到jdk\bin所在目录,jar包的路径要使用本身的。
二、检查jdk路径是否正确
三、选择AspectJ的安装路径
四、目录结构以下
bin下的ajc是AspectJ的编译器(javac是java的编译器)。
lib目录以下
一、插件中要安装
第一个是支持单独使用AspectJ,第二个是支持Spring AOP、在Spring中使用AspectJ。此处安装第一个就ok,但之后会用到第二个,咱们一同安上。其实,实际项目中咱们使用的基本都是第二个。
二、新建java项目
三、将lib下的aspectjrt.jar包添加到项目依赖中。注意这不是从官网下载获得的那个jar包。
四、设置aspectj的编译器
ok,项目环境配好。
IDEA内置了ajc编译器,只须要提供lib下的jar包便可,其实咱们能够简单粗暴地解压官网下载的jar,获得lib就能够。固然,这种方式不能获得ajc,就是说不能在命令行下编译aspectj,只能使用IDEA内置的ajc。
安装的这种方式,能够直接在命令行下使用ajc命令编译aspectj项目的java文件,固然也能够在IDEA中使用内置的ajc编译。
一、新建包user,包下新建类User
1 public class User { 2 public void addUser(){ 3 System.out.println("正在添加用户"); 4 System.out.println("添加用户成功"); 5 } 6 }
二、新建包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的关键字。
三、新建包test,包下新建测试类Test
1 public class Test { 2 public static void main(String[] args) { 3 User user=new User(); 4 user.addUser(); 5 } 6 }
四、运行,控制台输出以下
正在检查权限
权限已够
正在添加用户
添加用户成功
正在记录日志
已记录日志