一,AOP的概念
AOP称为面向切面编程,它主要是在不影响原有系统的功能的前提下,为软件进行横向扩展功能。可以使业务逻辑各个部分之间耦合性降低,提高程序的可重用性,提高了开发的效率。
二,AOP中的一些基本概念
1.连接点(Join Point):层与层之间的调用过程中,目标层中提供的可调用的方法称为连接点。
2.切入点(Pointcut):在连接点的基础上,增加上切入规则,选择出需要进行增强的连接点,基于这些选出来的连接点,称之为切入点。
3.切面(Aspect):对层与层之间的调用过程进行增强的机制称为切面。
4.通知(Advice): 对选出来的切入点进行增强的切面类中的处理方法称之为通知。
5.目标对象(Target Object): 真正希望被访问到的对象。

未命名图片.png
三,切入点表达式(切入规则)
1.within表达式---粗粒度的切入点表达式。
- execution表达式---细粒度的切入点表达式。
四,Spring的五大通知类型
a.前置通知(before)
b.环绕通知(around)
c.后置通知(afterReturn)
d.异常通知(afterThrow)
e.最终通知(after)
五,Spring AOP的原理
Spring在创建bean时,除了创建目标对象bean之外,会根据aop的配置,生成目标对象的代理对象,并将其存储,之后获取bean得到的是代理对象,在代理对象中,根据配置的切入点规则,决定哪些方法不处理直接执行目标方法,哪些方法拦截后进行增强,需要增强的方法拦截后根据配置调用指定切面中的指定通知执行增强操作。
Spring自动为目标对象生成代理对象,默认情况下,如果目标对象实现过接口,则采用java的动态代理机制,如果目标对象没有实现过接口,则采用cglib动态代理。
开发者可以可以在spring中进行配置,要求无论目标对象是否实现过接口,都强制使用cglib动态代理。