1.什么是AOP ?
**A.**Aspect Oriented Program ⾯向切⾯编程 通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。
可以说是OOP(Object Oriented Programming,面向对象编程)的补充和完善。OOP引入封装、继承、多态等概念来建立一种对象层次结构,用于模拟公共行为的一个集合。不过OOP允许开发者定义纵向的关系,但并不适合定义横向的关系,例如日志功能。日志代码往往横向地散布在所有对象层次中,而与它对应的对象的核心功能毫无关系对于其他类型的代码,如安全性、异常处理和透明的持续性也都是如此,这种散布在各处的无关的代码被称为横切(cross cutting),在OOP设计中,它导致了大量代码的重复,而不利于各个模块的重用。AOP技术恰恰相反,它利用一种称为”横切”的技术,剖解开封装的对象内部,并将那些影响了多个类的公共行为封装到一个可重用模块,并将其命名为”Aspect”,即切面。所谓”切面”,简单说就是那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来,便于减少系统的重复代码,降低模块之间的耦合度,并有利于未来的可操作性和可维护性。
**B.**在不改变原有逻辑上增加额外的功能,⽐如解决系统层⾯的问题,或者增加新的功能
**C.**可以通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种技术。
2.使用场景
权限控制
缓存
⽇志处理
事务控制
3.AOP思想把功能分两个部分,分离系统中的各种关注点
核⼼关注点
业务的主要功能
横切关注点
⾮核⼼、额外增加的功能
4.好处
减少代码侵⼊,解耦
可以统⼀处理横切逻辑
⽅便添加和删除横切逻辑
5.AOP面向切面编程的相关核心概念
1.横切关注点 :对哪些⽅法进⾏拦截,拦截后怎么处理,这些就叫横切关注点 ⽐如 权限认证、⽇志、事物
2.通知 Advice :在特定的切⼊点上执⾏的增强处理,有5种通知,可以用于你需要记录⽇志,控制事务 ,提前编写好通⽤的模块,需要的地⽅直接调⽤
- 连接点 JointPoint :要⽤通知的地⽅,业务流程在运⾏过程中需要插⼊切⾯的具体位置, ⼀般是⽅法的调⽤前后,全部⽅法都可以是连接点 只是概念,没啥特殊
4.切⼊点 Pointcut :不能全部⽅法都是连接点,通过特定的规则来筛选连接点, 就是Pointcut,选中那⼏个你想要 的⽅法 在程序中主要体现为书写切⼊点表达式(通过通配、正则表达式)过滤出特定的⼀组 JointPoint连接点 过滤出相应的 Advice 将要发⽣的joinpoint地⽅
5.切⾯ Aspect: 通常是⼀个类,⾥⾯定义 切⼊点+通知 , 定义在什么地⽅; 什么时间点、做什么事情 通知 advice指明了时间和做的事情(前置、后置等) 切⼊点 pointcut 指定在什么地⽅⼲这个事情 web接⼝设计中,web层->⽹关层->服务层->数据层,每⼀层之间也是⼀个切⾯,对象和对 象,⽅法和⽅法之间都是⼀个个切⾯
6.⽬标 target :⽬标类,真正的业务逻辑,可以在⽬标类不知情的条件下,增加新的功能到⽬标类的链路上
7.织⼊ Weaving :把切⾯(某个类)应⽤到⽬标函数的过程称为织⼊
举例如下:
1.常⻅例⼦
⽤户下单
核⼼关注点:创建订单
横切关注点:记录⽇志、控制事务
⽤户观看付费视频
核⼼关注点:获取播放地址
横切关注点:记录⽇志、权限认证
2.对于如下例子有: