什么是面向切面编程?

什么是面向切面编程?
一、前言
 
大家好,我是小诚,又到了愉快的学习时间,上一周因为小伙伴投稿,所以写了:《什么是面向接口编程》,文章颇受大家欢迎,于是又有小伙伴建议介绍关于:面向切面编程的知识点,于是就有了本篇文章,没办法,就是这么宠粉!(有亿点自恋…)
 
再唠叨两句,因为工作和个人要求原因,之前写得MySQL从0学习序系列好久没有更新了,但是,请大家相信,这个系列不会断更,小诚会要以更高的要求和质量继续编写,相信能够给大家带来更多更好的文章。
 
如果文章对你有帮助,可以帮忙一键三连和专栏订阅哦! 如面试中遇到一些奇怪或者比较新颖的题目,欢迎私信投稿,感谢阅读(私信我即可投稿)!
 
二、JAVA专栏推荐
 
二、专栏推荐
 
  JAVA和MySQL技术专栏还在免费分享哦,大家可以帮忙点点订阅哦!
 
  《JAVA知识大全》
 
  《从0到1-全面深刻理解MySQL系列》
 
三、初次见面-面向切面编程
 
三、初次见面-面向切面编程
 
  前一篇文章我们介绍了什么是面向接口编程,现在又来一个面向切面编程,两者到底存在什么联系呢? 下面慢慢道来!
 
  AOP(Aspect-Oriented Programming的简称),也就是面向切面编程的意思,它是一种编程思想,在Spring的官方文档中描述: 面向切面编程(AOP)提供了另一种思考程序结构的方式来对面向对象编程(OOP)的进行补充和完善,面向对象编程(OOP)中关键的是对象,而面向切面编程(AOP)中关键的是切面。
 
  AOP中切面可以实现关注点的模块化(即统一抽取,提高复用),例如跨越多种类型和对象的事务管理,这种关注点在 AOP 文献中通常被称为横切关注点。
 
  单单看文字描述可能比较抽象,下面我们通过具体例子结合图片来形象化这些概念。
 
  例子: 洗澡(声明,以下步骤是个人构想,不代表大家,如果觉的我的设想不够丰富的,欢迎评论留言,送你上热搜)
 
  步骤(男): 脱衣服、唱歌、洗脸、洗头、洗身体、擦干身体、穿衣服
 
  步骤(女): 脱衣服、洗脸、洗头、护发、洗身体、擦干身体、护肤、穿衣服
 
  发现问题: 通过上面的例子,我们会发现无论男女,脱衣服、穿衣服是洗澡不可缺少的步骤,而且这两个步骤在“洗澡”这个业务不是核心,它只是一个关注点,因为脱衣服和穿衣服的场景并不只是在洗澡中存在(还有什么场景自己联想),就比如: 天气热我们需要脱衣服,天气冷我们需要穿衣服,所以,将衣服的管理定义成一个模块,然后在需要的地方调用才是是一个更加合理的设计,具体如下图:
 
  小结
 
  通过上一篇文章我们能够知道,面向对象编程(OOP)的出现让开发者能够实现纵向的业务逻辑处理,但面向对象编程(OOP)并不适合用于定义横向业务逻辑的关系,这样的设计会导致系统出现大量重复代码,复用性极差,如最常用的日志以及事务功能,它们都可能是横向的分布在不通的业务层级(对象层级)中,但是又和具体的核心业务无直接关系,诸如这样类型的代码,在程序中被称作横切(cross cutting),我们应该考虑将这一类代码进行统一管理,提高复用性。
 
  面向切面编程(AOP)就是将这类与核心业务无关的,但又影响着多个类的公共行为抽取、封装到一个可重用模块,从而实现代码复用和模块解耦的目的,这种开发思想则被称为面向切面编程。

推荐阅读