Spring提供了4中类型的AOP支持:
1.基于代理的经典Spring AOP
2.纯POJO切面
3.@AspectJ注解驱动的切面
4.注入式AspectJ(适用于Spring各版本)
前三种都是Spring AOP实现的变体,Spring AOP构建在动态代理基础之上,因此,Spring对AOP的支持局限于方法拦截
Spring通知是Java编写的:
Spring所创建的通知都是用标准的Java类编写的.
Spring在运行时通知对象:
通知在代理类中包裹切面,Spring在运行期把切面织入到Spring管理的Bean中.
代理类封装了目标类,并拦截被通知方法的调用,再把调用转发给真正的目标bean.当代理拦截到方法调用时,在调用目标bean 方法之前,会执行切面逻辑.
直到应用需要被代理的bean时,Spring才创建代理对象.因此,Spring时运行时才创建代理对象.
Spring只支持方法级别的连接点:
因为Spring基于动态代理,所以Spring只支持方法连接点.方法拦截可以满足大部分的需求.如果需要方法拦截之外的连接点拦截功能,那么我们可以利用Aspect来补充Spring AOP的功能.