0.SpringAop之基础
Posted Java后端笔记
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了0.SpringAop之基础相关的知识,希望对你有一定的参考价值。
最近在看Spring Aop的源码,大致流程也差不多看懂了,希望通过写几篇源码解析来更加细致的了解Spring中的Aop,这一篇介绍一下Aop里面的概念以及怎么使用
1.核心概念
横切关注点
对哪些方法进行拦截,拦截后怎么处理,这些关注点称之为横切关注点切面(aspect) 类是对物体特征的抽象,切面就是对横切关注点的抽象
连接点(joinpoint)
被拦截到的点,因为Spring只支持方法类型的连接点,所以在Spring中连接点指的就是被拦截到的方法,实际上连接点还可以是字段或者构造器切入点(pointcut) 对连接点进行拦截的定义
通知(advice) 所谓通知指的就是指拦截到连接点之后要执行的代码,通知分为前置、后置、异常、最终、环绕通知五类
目标对象 代理的目标对象
织入(weave) 将切面应用到目标对象并导致代理对象创建的过程
引入(introduction) 在不修改代码的前提下,引入可以在运行期为类动态地添加一些方法或字段
2.Spring对Aop的支持
Spring中AOP代理由Spring的IOC容器负责生成、管理,其依赖关系也由IOC容器负责管理。因此,AOP代理可以直接使用容器中的其它bean实例作为目标,这种关系可由IOC容器的依赖注入提供。Spring创建代理的规则为:
1.默认使用Java动态代理来创建AOP代理,这样就可以为任何接口实例创建代理了
2.当需要代理的类不是代理接口的时候,Spring会切换为使用CGLIB代理,也可强制使用CGLIB
AOP编程其实是很简单的事情,纵观AOP编程,程序员只需要参与三个部分:
1.定义普通业务组件
2.定义切入点,一个切入点可能横切多个业务组件
3.定义增强处理,增强处理就是在AOP框架为普通业务组件织入的处理动作
所以进行AOP编程的关键就是定义切入点和定义增强处理,一旦定义了合适的切入点和增强处理,AOP框架将自动生成AOP代理,即:代理对象的方法=增强处理+被代理对象的方法。
3.如何使用Aop
使用方式为以下几种
声明式Aop:ProxyFactoryBean
编程式Aop:ProxyFactory
声明式Aop基于配置:DefaultAdvisorAutoProxyCreator
声明式Aop基于配置:Aspect-xml
声明式Aop基于注解:Aspect-Annotation
4.Spring中的Aop
在Spring中对Aop抽象了几个模型,Advice,PointCut,Advisor,Inteceptor,Invocation 具体关系如下 Advisor由Advice和PointCut组成 Advisor会根据方法元信息生成Inteceptor调用链 Invocation通过Inteceptor调用链执行横切逻辑
所以在上一节中的所有使用方式都是逃不开这几个模型,对于Aspect模块来说,主要用到了它的execution表达式的PointCut,用来筛选匹配方法。而传统的匹配模式一般是正则,方法名等。
接下来我会从上一节的5种Aop使用方式讲解源码
以上是关于0.SpringAop之基础的主要内容,如果未能解决你的问题,请参考以下文章