Spring的AOP实现底层就是对上面的动态代理的代码进行了封装,封装后我们只需要对需要关注的部分进行代码编写,并通过配置的方式完成指定目标的方法增强。
在正式讲解AOP的操作之前,我们必须理解AOP的相关术语,常用的术语如下:
- Target (目标对象) :代理的目标对象
- Proxy (代理) :一个类被AOP织入增强后,就产生个结果代理类。之前使用动态生成代理对象对目标方法进行增强
- Joinpoint (连接点) :所谓连接点是指那些被拦截到的点(方法)。在spring中,这些点指的是方法,因为spring只支持方法类型的连接点。
- 点:等同于方法
- 连接点就是可以被增强的方法
- Pointcut (切入点):所谓切入点是指我们要对哪些Joinpoint进行拦截的定义。
- 简称为切点,切点就是对那些连接点进行配置了,或者说这个切入点真正被增强了,也就是真正被配置增强了,这些连接点就是切入点。
- 打个比方:公民都有机会成为人大代表,但是我们目前不是人大代表,此时我们就是连接点;当我们真正被选为人大代表就变成切点了
- 连接点的范围比切点大,切点是连接点的一部分
- Advice (通知/ 增强):所谓通知是指拦截到Joinpoint之后所要做的事情就是通知。
- 也就是增强逻辑,这些增强逻辑被要放在方法当中,而这个方法就叫做通知/增强
- Aspect (切面):是切入点和通知(引介)的结合
- 之前是说目标方法加增强就称为切面,而术语就是切点加通知就是切面
- Weaving (织入):是指把增强应用到目标对象来创建新的代理对象的过程。spring采用动态代理织入,而AspectU采用编译期织入和类装载期织入。
- 简单来说,就是将你的切点跟你的增强/通知,结合的过程,就可以认为是一个织入过程。
1.需要编写的内容
- 编写核心业务代码(目标类的目标方法)
- 编写切面类,面类中有通知(增强功能方法)
- 在配置文件中,配置织入关系,即将哪些通知与哪些连接点进行结合
2.AOP技术实现的内容
Spring框架监控切入方法的执行。一旦监控到切入点方法被运行,使用代理机制,动态创建目标对象的代理对象,根据通知类别,在代理对象的对应位置,将通知对应的功能织入,完成完整的代码逻辑运行。
- 切点需要进行配置,通过配置文件指定哪些方法是切点。
- 当在执行或调用那些方法时,说明这个切入点配置的那些切点其中的某一个方法执行了,一执行spring就监控到了。
- 一旦监控到切入点方法被运行,使用代理机制,动态创建这个切点的方法所在的目标对象的代理对象。
- 创建代理对象过后,会根据你配置的增强类型或者是通知的类型,在代理对象对应的位置帮你再执行那个目标方法时,进行一个相应的增强方法织入
3.AOP底层使用哪种代理方式
在spring中,框架会根据目标类否实现了接口来决定采用哪种动态代理的方式。
- 有接口就使用jdk的那种
- 没有接口就使用cglib这种
- 会自动判断
- aop:面向切面编程
- aop底层实现:基基JDK的动态代理和基于Cglib的动态代理
- aop的重点概念:
- Pointcut (切入点) :被增强的方法
- Advice (通知/增强) :封装增强业务逻辑的方法
- Aspect (切面) :切点+通知
- Weaving (织入) :将切点与知结合的过程
- 开发明确事项:
- 谁是切点(切点表达式配置)
- 谁是通知(切面类中的增强方法)
- 将切点和通知进行织入配置



