文档章节

Spring学习笔记: 关于Advisor和PointcutAdvior

猪刚烈
 猪刚烈
发布于 2014/10/12 11:40
字数 661
阅读 23
收藏 0

 关于Advisor和PointcutAdvior


Advisor是用来持有(hold)一种advice的,它有一个getAdvice()方法,专门来得到其所持有的advice而pointcutAdvior继承自Advisor接口,同时本身又提供了一个getPointcut方法,这十分明确地说明:pointcutAdvior是用来组装advice和pointcut这两个切面的重要组成元素的,因此我们说pointcutAdvisor才是一个切面的实例模块,而不是有些书上说的Advisor!

理论上讲:我们想实现自己的一个切面,只要需提供一个实现advisor接口的类和一个实现pointcut接口的类,然后用一个pointcutAdvisor接口的实现类来把把来个类组装起来就构成了我们自己的切面实例.但是事实上spring框架为我们提供了很多的子接口和实现类,来简化我们的工作,这包括:

1.advice:AfterAdvice AfterReturningAdvice MethodBeforeAdvice 等接口
2.pointcut:NameMatchMethodPointcut(最常用),还有与之相对应的DynamicMethodMatcherPointcut
3.pointcutAdvisor:在框架里每有一个pointcut,就会有一个与之对应的pointcutAdvisot例如上面提到的NameMatchMethodPointcut就有一个对其对应的StaticMethodMatcherPointcut.另外还有一种功能十分
强大的正则表达式pointcutAdvisor:RegexpMethodPointcutAdvisor(注意:这个pointcutAdvisor是没有
与其对应的pointcut存在的.也说是没有RegexpMethodPointcut这么一个类),它使用正则表达式来描述
它的pointcut. 最后提到的一个就是:DefaultPointcutAdvisor这是一个使用频率很高的

PointcutAdvisor,一般来说我们就是用它来组装我们写好的advice和pointcut!
它有两个属性:advice和pointcut正好用来接受我们提供给它的dvice和pointcut.

关于pointcutAdvisot的使用:两种情况:一种是我们定义自己的advice,又定义了一个pointcut,那么,
显然,这时我们应该使用DefaultPointcutAdvisor来装配我们的Dvice和pointcut.第二种情况是:
我们其实可以只定义自己的advice,然后直接选用一种pointcutAdvisor来装配,至于pointcut,则是
通过设置这种pointcutAdvisor的一个pattern属性来在这个ointcutAdvisor的内部自动生成一个

pointcut.这种方法较第一种要简洁不少,代码的书写量也少了很多(因为不用专门去写一个pointcut类
和其对就的配制了),缺点是这个装配的过程显得有点"古怪",原为看起来好像少了pointcut.
最后再次强调的时:如果采取第二种方式,那么我们应该首选:RegexpMethodPointcutAdvisor.它通过正则

表达式来指定切入点,其若能是十分强大而方便的.

本文转载自:http://blog.csdn.net/bluishglc/article/details/1664000

共有 人打赏支持
猪刚烈
粉丝 22
博文 708
码字总数 110
作品 1
海淀
程序员
私信 提问
Spring AOP 源码分析 - 筛选合适的通知器

1.简介 从本篇文章开始,我将会对 Spring AOP 部分的源码进行分析。本文是 Spring AOP 源码分析系列文章的第二篇,本文主要分析 Spring AOP 是如何为目标 bean 筛选出合适的通知器(Advisor...

java高级架构牛人
06/21
0
0
Spring事务用法示例与实现原理

关于事务,简单来说,就是为了保证数据完整性而存在的一种工具,其主要有四大特性:原子性,一致性,隔离性和持久性。对于Spring事务,其最终还是在数据库层面实现的,而Spring只是以一种比较...

爱宝贝丶
08/28
0
0
Spring Aop之Advisor解析

在上文Spring Aop之Target Source详解中,我们讲解了Spring是如何通过封装来达到对最终获取的目标bean进行封装的目的。其中我们讲解到,Spring Aop对目标bean进行代理是通过进行的,Spring ...

爱宝贝丶
08/17
0
0
Spring AOP 原理源码深度剖析

转载请标明出处: https://www.fangzhipeng.com 本文转载于吉姆餐厅ak 概述 AOP(Aspect-Oriented Programming) 面向切面编程。Spring Aop 在 Spring框架中的地位举足轻重,主要用于实现事务、...

方志朋
前天
0
0
Spring AOP 源码分析系列文章导读

简介 前一段时间,我学习了 Spring IOC 容器方面的源码,并写了数篇文章对此进行讲解。在写完 Spring IOC 容器源码分析系列文章中的最后一篇后,没敢懈怠,趁热打铁,花了3天时间阅读了 AOP ...

java高级架构牛人
06/21
0
0

没有更多内容

加载失败,请刷新页面

加载更多

centos安装confluence全攻略

https://blog.csdn.net/qwer026/article/details/51439076

happyeveryday32
17分钟前
2
0
30 行 Javascript 代码搞定智能家居系统

本文首发于『阿里云 IoT 开发者社区』,更多精彩物联网内容欢迎前往浏览。 智能家居可谓是今年物联网的热门领域,通过智能单品和智能音箱,人们已然把『智能』两个字变成了生活的理所应当。搭...

阿里云官方博客
20分钟前
2
0
sed插入和附加文本基础使用

对于编辑器来说,在数据中增加行算是很基本的操作吧,sed有以下两个操作: 插入(insert)命令(i)会在指定行前增加一个新行 附加(append)命令(a)会在指定行后增加一个新行 还是用下面的文本来测...

woshixin
28分钟前
1
0
HIVE数据倾斜总结

在做Shuffle阶段的优化过程中,遇到了数据倾斜的问题,造成了对一些情况下优化效果不明显。主要是因为在Job完成后的所得到的Counters是整个Job的总和,优化是基于这些Counters得出的平均值,...

瑞查德-Jack
38分钟前
0
0
Pure-ftpd搭建FTP

12月11日任务 15.4 xshell使用xftp传输文件 15.5 使用pure-ftpd搭建ftp服务 使用pure-ftpd搭建FTP服务 轻量的ftp软件 安装pure-ftpd并修改配置文件 # pure-ftpd为epel扩展库里的软件[root...

robertt15
47分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部