一、 业务逻辑重复功能提取,使模块内部解耦。
现实逻辑 : 我每天在吃饭前需要拿一双筷子或者勺子
重复功能 拿勺筷子或者勺子
业务逻辑 吃饭
正常思路编写
1.午餐 -> 筷子、勺子,吃饭
2.晚餐 -> 筷子、勺子、吃饭
3.早餐 -> 筷子、勺子、吃饭
AOP
将与固定操作(筷子、勺子)抽取,与业务逻辑吃饭进行分离。
当检测到当前行为是吃饭,我们就去拿筷子或者勺子
在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期间动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。 —— 百度百科
AOP中的几个重点
想要实现在某一行为前/后,产生指定行为,我们需要明确两个目标
- “某一行为” 具体是什么 —— 也就是切入点
- “指定行为” 具体是什么 —— 通知
- “由 切入点、通知 共同构成的类 —— 切面对象”
- 如果我希望根据午餐的不同种类决定我具体是拿筷子,还是勺子呢 ?
我们需要让通知(切入点前后的指定行为) 和 切入点 建立联系,让通知获取到切入点的具体属性(也就是方法的参数)例如我的吃饭方通过g法传递进来的参数为粥,那我就去拿勺子
- 让通知和切入点建立联系的对象叫做连接点(joinpoint)通过该对象可以获取到连接点的具体方法名称,参数等信息
实际应用
Aop通常应用在日志输出,权限校验等业务场景