aspectj原理_每天3分钟-快速掌握spring aop原理-AspectJ使用

  • 去官网下载aspectj的jar包,关注下自己使用的jdk的版本
https://www.eclipse.org/aspectj/downloads.php
  • 下载成功以后,执行命令
java -jar aspectj-1.8.14.jar
  • 会弹出安装界面
e400ece97146a92226e05e620198234d.png
  • 安装成功以后,还需要添加环境变量,以mac为例
vim ./.bash_profileexport PATH=${JAVA_HOME}/bin:$PATH:/Users/local/aspectj1.8/binexport CLASSPATH=${CLASSPATH}:/Users/local/aspectj1.8/lib/aspectjrt.jarsource ./.bash_profile
  • 配置完成后,输入命令ajc,确定下是否安装成功,成功的话会提示相应的版本
153812eb093be9db8377d70f762faf4b.png
  • 首先编写一个简单的 Java 类,这个 Java 类用于模拟一个业务组件
public class Hello {    public void sayHello() {        System.out.println("Hello, AspectJ!");    }    public static void main(String[] args) {        Hello hello = new Hello();        hello.sayHello();    }}
  • 假设现在客户需要在执行 sayHello() 方法之前启动事务,当该方法执行结束时关闭事务,在传统编程模式下,我们必须手动修改 sayHello() 方法
  • 如果改为使用 AspectJ,则可以无须修改上面的 sayHello() 方法,使用AspectJ来创建一个特殊的类
public aspect TxAspect {    void around():call(void Hello.sayHello()){        System.out.println("开始事务...");        proceed();        System.out.println("事务结束...");    }}
  • TxAspect 不是一个 Java 类, aspect 也不是 Java 支持的关键字,它只是 AspectJ 才能识别的关键字,上面的代码中 proceed() 代表回调原来的 sayHello() 方法
  • 接下来执行如下命令进行编译:
ajc -d . Hello.java TxAspect.aj
  • 然后会输出结果
开始事务...Hello AspectJ!事务结束...
  • 从上面运行结果来看,我们完全可以不对 Hello.java 类进行任何修改,同时又可以满足客户的需求,上面程序只是在控制台打印”开始事务 …”、”结束事务 …”来模拟了事务操作,实际上我们可用实际的事务操作代码来代替这两行简单的语句,这就可以满足客户需求了
  • 通过使用 AspectJ 提供的 AOP 支持,我们可以为 sayHello() 方法不断增加新功能。
  • 为什么在对 Hello 类没有任何修改的前提下,而 Hello 类能不断地、动态增加新功能,这看上去并不符合 Java 基本语法规则啊。实际上我们可以使用 Java 的反编译工具来反编译前面程序生成的 Hello.class 文件,发现 Hello.class 文件的代码如下:
import org.aspectj.runtime.internal.AroundClosure;public class Hello {    public Hello() {    }    public void sayHello() {        System.out.println("Hello, AspectJ!");    }    public static void main(String[] args) {        Hello hello = new Hello();        sayHello_aroundBody1$advice(hello, TxAspect.aspectOf(), (AroundClosure)null);    }}
  • 该 Hello.class 里新增了很多内容,这表明 AspectJ 在编译时”自动”编译得到了一个新类,这个新类增强了原有的 Hello.java 类的功能,因此 AspectJ 通常被称为编译时增强的 AOP 框架。

都看到这了,你是最棒的

c9ba6e2e9b13a6c0f1ce8036b2a79efb.gif
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值