为什么需要 Spring AOP?

1. AOP 初窥

比如如下一段代码,仅仅根据商品 Id 获取商品信息

public GoodsVo getGoodsVoByGoodsId(long goodsId) {
    return goodsMapper.getGoodsVoByGoodsId(goodsId);
}

有时候为了便于观察执行情况,会在前后加上日志,这种都很常见吧。

public GoodsVo getGoodsVoByGoodsId(long goodsId) {
    Log.info("get Goods info, goodsId:" + goodsId);
    GoodsVo goodsVoByGoodsId = goodsMapper.getGoodsVoByGoodsId(goodsId);
    Log.info("get Goods info, goodInfos:" + goodsVoByGoodsId);
    return goodsVoByGoodsId;
}

好家伙,真正的业务代码,只有一行,额外的日志却有两行。这还是一个简单的需求,如果是生产中,每个反复都如此,业务代码会被淹没在 “额外的无用代码” 中,后续系统将变得及其难以维护。

1. 为什么需要 AOP

为了更好的解决这种问题,前辈们提出了 AOP (Aspect Oriented Programming),作为 OOP(Object Oriented Programming)的补充。

为什么叫做 Aspect 呢?其实就是一种对逻辑的抽象, Aspect 对于 AOP,相当于 Class 对于 OOP

Aspect 含义

AOP 是为了解决 OOP 不足的问题引入了,并不是一个单独的概念,都说面向切面,没有面?怎么切呢?

2. AOP 实现方式

AOP 是一种理念,而不是一种语言,上面说到 AOP 需要依托于某一种语言实现,就好比 OOP 的实现有 Java,C++ 等

最著名的莫过于 AspectJ ,其实就是一种 Java 版本的 ASpect。

动态代理

在运行期间,为对应接口动态生成对应的代理对象。

显著的缺点:所有需要织入的类都需要实现相应的接口

动态字节码增强

在动态构建字节码文件时,织入相应逻辑,真正做到不感知

缺点:如果需要扩展的类为 final 时,则无法进行扩展。

总结

本文简单介绍了,为什么需要 AOP , 其实 AOP 并不是 Java 中独有的,是一种思想。只有知道了为何而来,才能更加方便了解具体怎么做。

下一篇介绍 实现 AOP 的核心思想:动态代理模式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值