Oriented: 以什么为方向的
Aspect: 方面,切面,特色,朝向
AOP:Aspect Oriented Programming,即面向切面编程。
OOP:Object Oriented Programming,OOP作为面向对象编程的模式,获得了巨大的成功,OOP的主要功能是数据封装、继承和多态。
OOP把系统切分为各个对象,客户,商品,购物车,关注对象。AOP把系统分解为不同的关注层面,比如日志,登录验证,事务处理,系统缓存加速。
尽管系统需要处理自己的独立对象,比如购物中的GoodsService关注商品,UserService关注用户,但是这些系统都需要一个共同的切面Log
比如商品服务GoodsService包含的三个方法
createGoods
updateGoods
deleteGoods
public class GoodsService {
public void createGoods(Goods goods) {
securityCheck();
try {
// 核心业务逻辑
tx.commit();
} catch (RuntimeException e) {
tx.rollback();
throw e;
}
log("created goods: " + goods);
}
public void updateGoods(Goods goods) {
securityCheck();
try {
// 核心业务逻辑
tx.commit();
} catch (RuntimeException e) {
tx.rollback();
throw e;
}
log("updated goods: " + goods);
}
}
这些代码里重复出现权限检查和日志记录
我们不如把权限检查和日志看做一个切面,来统一解决就好了。这样GoodsService关注自己的商品逻辑就可以了。
当系统调用了GoodsSerivice.createGoods()方法的时候,系统自动拦截,进行权限检查,日志处理
Java平台AOP有三种方案
Spring AOP的本质是动态代理,如果没有接口,要用到CGLIB
AspectJ是一个java实现的AOP框架,它能够对java代码进行AOP编译(一般在编译期进行),让java代码具有AspectJ的AOP功能(当然需要特殊的编译器)
Spring AOP 支持对XML模式和基于@AspectJ注解的两种配置方式。
在Spring项目采用AOP编程,可以使用Spring AOP或者AspectJ两种的一种。AspectJ 性能更好,支持功能更强大,Spring AOP较为简单,容易上手。
好处:AOP技术的优势使得需要编写的代码量大大缩减,节省了时间,控制了开发成本。同时也使得开发人员可以集中关注于系统的核心商业逻辑。此外,它更利于创建松散耦合、可复用与可扩展的大型软件系统。
参考资料
https://blog.csdn.net/qq_43842093/article/details/121803976
https://pdai.tech/md/spring/spring-x-framework-aop.html
https://www.cnblogs.com/cxuanBlog/p/13060510.html
https://www.liaoxuefeng.com/wiki/1252599548343744/1266265125480448