Spring AOP的简单理解

AOP简介

AOP是面向切面编程的意思,全称为Aspect Oriented Programing。他是一种基于OOP之上的一种编程范式,他弥补了OOP的不足,能更好的组织程序结构!
AOP可以把业务的功能步骤做成插拔式的组件(这种开发方式也叫“横向开发"),从而可以用这些组件定制新的功能。因此AOP可以提高业务的复用性,提高开发效率!。
例如:移动、联通、电信的各种话费套餐。每-种套餐都是由几部分业务构成的,单独的某一个业务都是已经写好的功能代码,
最后把这些业务功能组装在一起就构成了一个套餐,而不需要为每一种套餐单独进行开发!

AOP基本概念

1.连接点(Joinpoint) (类中所有方法)。
2.切入点(Pointcut) (确实共性功能代码的方法)。
3.通 知(Advice) (被抽取的共性功能的代码逻辑,通知有位置区分,也就是从切入点方法中被抽取代码的前面还是后面抽象出来的代码,叫通知类型。前置通知、后置通知)。
4.引入(Introduction) (了解,通知只能抽取逻辑代码,变量是拿不出来的,把变量引入到切入点方法中去,就要用引入)。
5.目标对象(Target Object):有切入点方法的对象
6.AOP代理(AOP Proxy): Spring代理目标对象就叫做AOP代理。
7.织入(Weaving): 代理对象把通知织入到目标对象的切入点方法中,是一个动作。
8.切面(Aspect): 通知和切入点之间的关系,

●连接点(Joinpoint)
	程序运行过程中,JVM负责程序运行。执行到某个方法时,JVM能识别当前执行的是哪个方法。
	这些定义在类中的方法,每个具有独立的功能,在AOP中,将这些具有特定功能的方法称为连接点。
	简单理解:连接点指类中的方法

●切入点(Pointcut)
	类中的方法具有很多,某些方法具有一些共同的流程,例如数据库连接的获取与关闭,事务的开启与提交,等等。
	将这些公共的特性抽取出来,抽取完毕后,原始方法中就缺少了这些被抽取的代码。
	在实际运行时,缺少这些代码是无法完成原始的功能的。这些被抽取了公共功能的方法称为切入点。
	切入点一定是连接点,连接点不一定是切入点
	简单理解为:切入点指能被抽取共性功能的方法
	
●通知(Advice)
	切入点对应的方法的共性功能被抽取后,组成独立代码逻辑,被封装在某个类的某个方法中,
	在被抽取了共性功能的方法被执行时,这些代码逻辑还要加入原始方法的执行,
	这些被抽取出来组成独立代码逻辑的共性功能称为通知。
	共性功能被抽取后,可能来自于切入点对应的方法中的任何位置,因此通知不仅描述共性的代码逻辑,
	还是描述被抽取时从何处抽取。例如切入点代码逻辑的前面,中间还是后面,被抽取的代码在切入点中的具体位置,
	称为通知类型(前置通知,后置通知,返回通知,异常通知,环绕通知)
	简单理解为:通知就是抽取的共性功能组成的代码逻辑(可以简单理解为封装共性功能的方法)
	
●引入(Introduction)(了解)
	通知仅表示切入点被抽取的逻辑代码,对于切入点所在的类,如果存在有共性的成员变量或者成员方法,
	通知将无法进行描述。AOP提供引入机制将共性功能的成员进行加入。
	引入机制可以为类添加额外的成员变量或者成员方法。
	引入机制是在编译期或类加载期完成的。
	
●目标对象(Target Object)
	切入点对应的共性功能被抽取后创建独立的通知完成共性功能,在程序运行时,动态的为类对象执行切入点方法时动态加入被抽取的共性功能,
	此时需要使用代理的模式完成。
	此时被代理创建的对象,称为目标对象。
	目标对象指包含切入点的类对象。
	简单理解为:缺少原始共性代码所生成的对象

●AOP代理(AOP Proxy) 
	切入点所在的类对象执行切入点方法时,需要将原始的共性功能(通知)加入,此时通过代理的形式创建类对象,并完成共性功能(通知)的加入,
	上述过程称为 AOP代理。
	AOP代理的意义是将被抽取共性功能的类对象创建出,同时将共性功能(通知)加入,完成原始的完整操作的执行过程。
	
●切面(Aspect)
	切面是一个设计概念,指切入点与通知的匹配模式,换句话说指被抽取了共性功能的方法(切入点)与被抽取了共性功能(通知)对应的绑定关系。
	程序设计时,可以设置多个切面,用来描述切入点与通知之间的关系。

●织入(Weaving)
	通过AOP代理,完成了切入点与通知的融合,并组成完整的代码逻辑,将通知加入到切入点对应位置的动作称为织入。
	织入是一个动态过程,不对应任何代码,可以理解为动态的运行过程。
public class StuDao {
    public void add(){
        //1.开Session
        //2.开事务
        //3.执行添加学生的操作
        //4.关Session
    }

    public void delete(){
        //1.开Session
        //2.开事务
        //3.执行删除学生的操作
        //4.关Session
    }

    public void update(){
        //1.开Session
        //2.开事务
        //3.执行更新学生信息的操作
        //4.关Session
    }

    public void method(){
        //没有共性功能被抽取
    }

}

参照图片理解

在这里插入图片描述以上是对Spring AOP的简单理解,希望对您有帮助!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值