提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
AOP简介
在了解aop之前首先要引入oop的概念
oop也就是我们熟知的面向对象程序设计(Object Oriented Programming),oop关注的是将功能划分为模块,比如我们熟悉的三层架构——表现层、业务层、持久层,然后针对模块进行进一步的开发。
而aop更加侧重于“抽取”的思想。抽取一些高频重用的代码块等,有一种“切开”的意思
使用aop的优势很多——代码可重用性高,编码更简洁、代码维护更高效、业务扩展更便捷等
AOP入门
核心概念
1、连接点
AOP将所有的方法都视为连接点,不管是接口里面的抽象方法,还是实现类里面的重写方法,都是连接点
2、切入点
AOP将可能被抽取共性功能的方法称为切入点。切入点是连接点的子集
3、通知
AOP将抽取出来的共性功能称为通知。
通知类型:以通知在上下文中的具体位置作为划分。
4、切面
ASP将切入点和通知(也就是被抽取的方法,和抽取出来的共性功能)之间的关系称为切面,切面描述了两者之间的关系。比如说,通知在切入点的上下文关系如何,这样才能保证将通知拼接回切入点之后能让程序正常运行
5、目标对象
在把切入点的通知抽取完成之后剩下的部分(就像是残缺的方法),而一个方法必须要作为一个类的一部分参与整个项目,而这个类的调用需要一个实例化对象,这个对象就是所谓的目标对象
6、织入
目标对象单打独斗是绝对不能运行的,我们需要将之前从切入点抽取的通知按照切面规定的关系还原回去,这样才是具有完整运行能力的方法。这个还原回去的过程,AOP称为织入
7、代理
织入完成后,我们又重新获得了一个完整的方法;类似的,这个方法也要作为一个类的一部分参与项目的构建,而这个类是通过“5、目标对象”所在的类,变化过来的。这个变换的过程,称为代理。
8、 引入
通过代理我们得到了一个新的类,这个类具有目标对象所在类的一切属性、方法。同时,这个新的类,可以像打补丁一样,自己重新定义一些属性和方法(可以在不修改原有代码的基础上完成新增功能,这是非常重要的应用)
总结
在实际开发中,只需要我们编写切入点(从哪里抽取?抽取的对象是哪个方法?)、切面(抽取的代码的上下文关系如何?)、通知(抽取的共性功能是什么?)三大功能即可。
简单配置
在spring的核心配置文件中加上aop的相关实现。AOP最初只是一种编程规范,而spring对其作了实现
<bean id="myAdvice" class="com.ych.aop.AOPAdvice"/>
<!-- AOP的配置-->
<aop:config>
<!-- 为切入点配置唯一的id,切入点表示从哪个方法进行抽取-->
<aop:pointcut id="pt" expression="execution(* *..*(..))"/>
<!-- 声明切面,切面表示切入点和通知Advice的关系,ref表示通知的id-->
<aop:aspect ref="myAdvice">
<!-- before method表示是从切入点的代码之前抽取的代码;point-ref是之前切入点的id-->
<aop:before method="fun" pointcut-ref="pt"/>
</aop:aspect>
</aop:config>