文章插图
OOP 编程思想可以解决大部分的代码重复问题 。但是有一些问题是处理不了的 。比如在父类 Animal 中的多个方法的相同位置出现了重复的代码,OOP 就解决不了 。
/** * 动物父类 */public class Animal { /** 身高 */ private String height; /** 体重 */ private double weight; public void eat() { // 性能监控代码 long start = System.currentTimeMillis(); // 业务逻辑代码 System.out.println("I can eat..."); // 性能监控代码 System.out.println("执行时长:" + (System.currentTimeMillis() - start)/1000f + "s"); } public void run() { // 性能监控代码 long start = System.currentTimeMillis(); // 业务逻辑代码 System.out.println("I can run..."); // 性能监控代码 System.out.println("执行时长:" + (System.currentTimeMillis() - start)/1000f + "s"); }}
这部分重复的代码,一般统称为 横切逻辑代码 。
文章插图
横切逻辑代码存在的问题:
- 代码重复问题
- 横切逻辑代码和业务代码混杂在一起,代码臃肿,不便维护
AOP 另辟蹊径,提出横向抽取机制,将横切逻辑代码和业务逻辑代码分离
文章插图
代码拆分比较容易,难的是如何在不改变原有业务逻辑的情况下,悄无声息的将横向逻辑代码应用到原有的业务逻辑中,达到和原来一样的效果 。
AOP 解决了什么问题通过上面的分析可以发现,AOP 主要用来解决:在不改变原有业务逻辑的情况下,增强横切逻辑代码,根本上解耦合,避免横切逻辑代码重复 。
AOP 为什么叫面向切面编程切 :指的是横切逻辑,原有业务逻辑代码不动,只能操作横切逻辑代码,所以面向横切逻辑
面 :横切逻辑代码往往要影响的是很多个方法,每个方法如同一个点,多个点构成一个面 。这里有一个面的概念
【面试被问了几百遍的 IoC 和 AOP,还在傻傻搞不清楚?】
推荐阅读
- 这年头,连DNS隧道都被玩坏了
- Redis哨兵原理,我忍你很久了
- CPU、MPU、MCU和SOC还傻傻分不清楚 看这篇文章就够了
- ?60多天了可以做人流吗
- 单独喝玫瑰茶能减肥吗,你喝了吗
- 怀孕两个半月了胸不涨了正常吗?
- 会员|花4.5亿买地的少林寺 收了全世界的会员钱
- 图片|文本转图片的危险算法“达利”降临:“造假”程度绝了
- 淘宝一键铺货图片用不了 淘宝小店怎样上架图片
- 驾照到期了可以最迟几个月换证?