AspectJ使用日志

AspectJ

AspectJ 是一个基于 Java 语言的 AOP 框架,提供了强大的 AOP 功能,其他很多 AOP 框架都借鉴或采纳其中的一些思想。
AspectJ 是 Java 语言的一个 AOP 实现,其主要包括两个部分:第一个部分定义了如何表达、定义 AOP 编程中的语法规范,通过这套语言规范,我们可以方便地用 AOP 来解决 Java 语言中存在的交叉关注点问题;另一个部分是工具部分,包括编译器、调试工具等。
AspectJ 是最早、功能比较强大的 AOP 实现之一,对整套 AOP 机制都有较好的实现,很多其他语言的 AOP 实现,也借鉴或采纳了 AspectJ 中很多设计。在 Java 领域,AspectJ 中的很多语法结构基本上已成为 AOP 领域的标准。

安装AspectJ

下载AspectJ

安装 AspectJ 首先要到 AspectJ官网下载一个可执行的Jar包。

使用 java -jar aspectj-1.8.14.jar 命令

在安装了 AspectJ 之后,在其安装目录下,可以看到如下的文件结构:

├─bin // 该路径下存放了 aj、aj5、ajc、ajdoc、ajbrowser 等命令。
│  ├─aj.bat
│  ├─aj5.bat
│  ├─ajbrowser
│  ├─ajbrowser.bat
│  ├─ajc // 其中 ajc 命令最常用,它的作用类似于 javac,用于对普通 Java 类进行编译时增强。
│  ├─ajc.bat
│  ├─ajdoc
│  ├─ajdoc.bat
├─doc // 该路径下存放了AspectJ的使用说明、参考手册、API文档等文档。
├─lib // 该路径下的4个Jar文件是AspectJ的核心类库
│  ├─aspectjrt.jar
│  ├─aspectjtools.jar
│  ├─aspectjweaver.jar
│  ├─org.aspectj.matcher.jar
├─LICENSE-AspectJ.html	相关授权文件
└─README-AspectJ.html

用法

  • aspectjrt.jar包主要是提供运行时的一些注解,静态方法等等东西,通常我们要使用aspectJ的时候都要使用这个包。
  • aspectjtools.jar包主要是提供赫赫有名的ajc编译器,可以在编译期将将java文件或者class文件或者aspect文件定义的切面织入到业务代码中。通常这个东西会被封装进各种IDE插件或者自动化插件中。
  • aspectjweaverjar包主要是提供了一个java agent用于在类加载期间织入切面(Load time
    weaving)。并且提供了对切面语法的相关处理等基础方法,供ajc使用或者供第三方开发使用。这个包一般我们不需要显式引用,除非需要使用LTW。

上面的说明其实也就指出了aspectJ的几种标准的使用方法(参考文档):

  • 编译时织入,利用ajc编译器替代javac编译器,直接将源文件(java或者aspect文件)编译成class文件并将切面织入进代码。
  • 编译后织入,利用ajc编译器向javac编译期编译后的class文件或jar文件织入切面代码。
  • 加载时织入,不使用ajc编译器,利用aspectjweaver.jar工具,使用java agent代理在类加载期将切面织入进代码。

两个类

Dog.java
public class Dog {
    public void bark(){
        System.out.println("wang wang ~~~~");
    }
}
DogAspect.java
@Aspect
public class DogAspect {
    
    long startTime;
    
    @Pointcut("execution(* cn.com.hanru.booking.Dog.bark(..))")
    public void joinPoint(){}
    
    @Before("joinPoint()")
    public void preBark(){
        startTime = System.currentTimeMillis();
    }
    @After("joinPoint()")
    public void postBark(){
        long endTime = System.currentTimeMillis();
        System.out.println("旺财一口气叫了 " + (endTime - startTime) + ":ms");
    }
}
命令行编译和运行,windows环境
编译时织入
java -jar  E:/aspectj1.8/lib/aspectjtools.jar -cp  E:/aspectj1.8/lib/aspectjrt.jar -source 1.5  -sourceroots src/main/java/ -d target/classes
java -cp  "E:/aspectj1.8/lib/aspectjrt.jar;target/classes/"  cn.com.hanru.booking.AopApp
使用javac编译源文件,再使用java agent在运行时织入:

为了实现LTW,我们需要在资源目录下配置META-INF/aop.xml文件,来告知类加载器我们当前注册的切面,在上面的项目中,我们其实只需要创建src/main/resources/META-INF/aop.xml:

<aspectj>
    <aspects>
        <aspect name="cn.com.hanru.booking.DogAspect"/>
    </aspects>
</aspectj>
命令行运行,windows环境
java -javaagent:"E:/aspectj1.8/lib/aspectjweaver.jar"  -cp  "E:/aspectj1.8/lib/aspectjrt.jar;target/classes/"  cn.com.hanru.booking.AopApp
ideal 环境

在这里插入图片描述

编译运行
wang wang ~~~~
旺财一口气叫了 0:ms

参考

原生AspectJ用法分析以及Spring-AOP原理分析

AspectJ入门及在IDEA中的配置

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值