您的位置:首页 > 编程语言 > Java开发

Spring AOP 学习之Advisor

2017-10-24 16:48 381 查看
Spring 支持两种方法匹配器:方法匹配器的类型由 isRuntime()返回值决定

-- true ? 动态 : 静态;
- 静态方法匹配器

:仅对方法名签名(包括方法名和入参类型及顺序)进行匹配,仅判别一次
- 动态方法匹配器

:在运行期检查方法入参的值,每次调用方法必须判断

切点类型:

- 静态方法切点:org.springframework.aop.support.StaticMethodMatcherPointcut 是静态方法切点的抽象基类,默认匹配所有。

子类:

- NameMatchMethodPointcut:匹配简单字符串方法签名

- AbstractRegexpMethodPointcut:使用这则表达式匹配方法签名
- 动态方法切点:org.springframework.aop.support.DynamicMethodMatcherPointcut 是动态方法切点的抽象基类,默认匹配所有。

-注解切点:org.springframework.aop.support.annotation.AnnotationMatchingPointcut 实现类表示注解切点。使用AnnotationMatchingPointcut 支持在Bean中直接通过Java 5.0 注解标签定义的切点。
- 表达式切点:org.springframework.aop.support.ExpressionPointcut 支持AspectJ 切点表达式语法而定义的接口。
- 流程切点:org.springframework.aop.support.ControlFlowPointcut 表示控制流程切点,根据程序

执行堆栈的信息查看目标方法是否由某一个方法直接或间接发起调用,以此判断是否为匹配的连接点。
- 复合切点:org.springframework.aop.support.ComposablePointcut 为创建多个切点而提供的方便操作类。

切面类型:
- Advisor:一般切面,仅包含一个Advice
- PointcutAdvisor:具有切点的切面,包含Advice 和Pointcut 两个类。

DefaultPointcutAdvisor: 最常用的切面类型

NameMatchMethodPointcutAdvisor: 定义按方法名定义切点的切面

RegexpMethodPointcutAdvisor: 按正则表达式匹配方法名进行切点定义的切面

StaticMethodMatcherPointcutAdvisor: 静态方法匹配器切点定义的切面,默认匹配所有

AspectJExpressionPointcutAdvisor: 用于AspectJ 切点表达式定义切点的切面

AspectJPointcutAdvisor: 用于AspectJ语法定义切点的切面
- IntroductionAdvisor:引介切面

增强:
前置增强:BeforeAdvice
后置增强:AfterReturningAdvice
环绕增强:MethodInterceptor (在目标方法执行前后实施增强)
异常抛出增强:ThrowsAdvice
引介增强:IntroductionInterceptor (在目标类中添加一些新的方法和属性)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java aop spring