`
lianxiangbus
  • 浏览: 532471 次
文章分类
社区版块
存档分类
最新评论

[转贴]spring中最强大的Advisor-DefaultPointcutAdvisor

 
阅读更多
Spring2中除了NameMatchMethodPointcutAdvisor和RegexMethodPointcutAdvisor提供了对一定命名规则和正则表达式切入点的封装,defaultPointcutAdvisor则提供了一切切入点的支持,Spring提供了4种用来定义切入的类,分别为:
org.springframework.aop.support.NameMatchMethodPointcut、
org.springframework.aop.support.JdkRegexpMethodPointcut、org.springframework.aop.support.Perl5RegexpMethodPointcut,
org.springframework.aop.support.ExpressionPointcut,
这四种可以用来描述切入点的类均可由DefaultPointcutAdvisor来进行封装,首先我们讲解一下DefaultPointcutAdvisor的使用方法:
DefaultPointcutAdvisor类的使用很简单,他有一个 advice及 pointcut 属性,advice属性用来指明要使用的通知,pointcut属性用来指定切入点,我们可以通过构造子或设值注入方式来配置这个 Bean。看下面的构造子注入方式:
<beanid="defaultAdvisor"
class
="org.springframework.aop.support.DefaultPointcutAdvisor">
<constructor-argref="adviceBean"/>
<constructor-argref="poingcutBean"/>
</bean>
或者使用设值方法注入,如下所示:
<beanid="defaultAdvisor"
class
="org.springframework.aop.support.DefaultPointcutAdvisor">
<propertyname="advice"ref="adviceBean"></property>
<propertyname="pointcut"ref="pointcutBean"></property>
</bean>
下面集合这四种切入点的描述类一起讲解DefaultPointcutAdvisor:
1、org.springframework.aop.support.NameMatchMethodPointcut
将前面的RegexpMethodPointcutAdvisor的配置换成NameMatchMethodPointcut结合DefaultPointcutAdvisor只需要修改配置文件,最终配置如下:
<?xmlversion="1.0"encoding="UTF-8"?>
<beansxmlns="http://www.springframework.org/schema/beans"
xmlns:xsi
="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation
="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.0.xsd"
>
<beanid="beforeAdvice"
class
="spring.chapter3.advice.AdviceBeforeComponent"/>
<beanid="component"class="spring.chapter3.proxy.Component"/>
<beanid="pointcutBean"class="org.springframework.aop.support.NameMatchMethodPointcut">
<propertyname="mappedNames">
<list>
<value>business*</value>
</list>
</property>
</bean>
<beanid="defaultAdvisor"class="org.springframework.aop.support.DefaultPointcutAdvisor">
<propertyname="advice"ref="beforeAdvice"/>
<propertyname="pointcut"ref="pointcutBean"/>
</bean>
<beanid="proxy"
class
="org.springframework.aop.framework.ProxyFactoryBean">
<propertyname="proxyInterfaces"
value
="spring.chapter3.proxy.IComponent"/>
<propertyname="target"ref="component"/>
<propertyname="interceptorNames">
<list>
<value>defaultAdvisor</value>
</list>
</property>
</bean>
</beans>
NameMatchMethodPointcut只有一个属性mappedName或者mappedNames,前者表示映射单个字符串,后者表示映射一组字符串,支持<list>配置,这里“business*”表示所有business开头的方法,这里的“*”是通配符不是正则表达式,可以看出DefaultPointcutAdvisor的配置也很简单,就是给advice属性指定为beforeAdvice也就是前置通知,同时给pointcut属性指向了配置的NameMatchMethodPointcut。
2、org.springframework.aop.support.JdkRegexpMethodPointcut、
org.springframework.aop.support.Perl5RegexpMethodPointcut
由于这2个都是正则表达式切入点的描述,所以这里就放到一起对比讲解,JdkRegexpMethodPointcut需要在 JDK1.4 及以上的环境运行,不需要额外的库;Perl5RegexpMethodPointcut需要把 jakarta-oro-xx.jar 文件放到 classpath 上,比如 jakarta-oro-2.0.8.jar,这2个正则表达式切入点描述类的使用方法一样,他们均有2个属性:
(1) pattern或patterns:前者表示单个正则表达式,后置表示多个正则表达式,支持<list>配置;
(2) ExcludedPattern或ExcludedPatterns:前者表示排除某个字符串,后者表示排除一组字符串,支持<list>配置;
根据上面的讲述我们将前面的NameMatchMethodPoint改成JdkRegexpMethodPointcut和Perl5RegexpMethodPointcut配置,分别如下:
JdkRegexpMethodPointcut配置:
...
<beanid="pointcutBean"
class
="org.springframework.aop.support.JdkRegexpMethodPointcut">
<propertyname="pattern">
<value>.*business.*</value>
</property>
<propertyname="ExcludedPattern">
<value>business2</value>
</property>
</bean>
...
这里表示匹配所有business开头的方法但是除去了business2这个方法,其他的配置和NameMatchMethodPointcut一样。
Perl5RegexpMethodPointcut配置:
...
<beanid="pointcutBean"
class
="org.springframework.aop.support.Perl5RegexpMethodPointcut">
<propertyname="pattern">
<value>.*business.*</value>
</property>
<propertyname="ExcludedPattern">
<value>business2</value>
</property>
</bean>
...
这里只需要给class换成org.springframework.aop.support. Perl5RegexpMethodPointcut就可以了,同时在classpath中要添加jakarta-oro-xx.jar文件,其他的不需要做任何改变。
3、org.springframework.aop.support.ExpressionPointcut
Spring2 中,在 Pointcut 的基础上,引入了一个 ExpressionPointcut 接口用来通过切入点表达语言来描述切入点。有了 ExpressionPointcut,我们可以使用下面更加简单的方式来描述切入点,如 execution(* Component.business*(..))表示执行所有 Component 的业务方法(此处为 business 打头的方法)。
Spring2 提供了一个 ExpressionPointcut 的实现,即 AspectJExpressionPointcut,该类的使用很简单,只需要做如下配置即可:
...
<beanid="pointcutBean"
class
="org.springframework.aop.aspectj.AspectJExpressionPointcut">
<propertyname="expression"
value
="execution(voidspring.chapter3.proxy.Component.business*(..))">
</property>
</bean>
...
其他的配置和前面的几个均一样。
除了以上4种不同的切入点的应用,还可以自定义切入点进行某些特殊的运用,自定义切入点类只需要实现org.springframework.aop.pointcut类,然后再bean中声明该类,接着就可以使用这些自定的pointcut类了。

文章系erikchang所有,EasyJF版权所有,转载请注明出处!

觉得很有用,就转了.

分享到:
评论

相关推荐

    SPRING API 2.0.CHM

    DefaultPointcutAdvisor DefaultPropertiesPersister DefaultRemoteInvocationExecutor DefaultRemoteInvocationFactory DefaultRequestToViewNameTranslator DefaultResourceLoader DefaultScopedObject ...

    python爬虫数据可视化-10-where条件语句-模糊查询.ev4.rar

    python爬虫数据可视化-10-where条件语句-模糊查询.ev4.rar

    train.csv

    train

    Golang(Gin框架)+websocket 实现的多人聊天室+代码+详细文档

    Golang(Gin框架)+websocket 实现的多人聊天室+代码+详细文档

    用于艾默生、维蒂APM300等UPS主机管理设置软件

    用于艾默生、维蒂APM300等UPS主机管理设置软件

    flink样例完整代码

    flink样例完整代码

    基于Java的养牛知识小程序源码.zip

    提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

    XCOM V2.0.zip

    XCOM V2.0.zip

    基于stl_pg版本实现自己的stl库C++源码.zip

    【优质项目推荐】 1、项目代码均经过严格本地测试,运行OK,确保功能稳定后才上传平台。可放心下载并立即投入使用,若遇到任何使用问题,随时欢迎私信反馈与沟通,博主会第一时间回复。 2、项目适用于计算机相关专业(如计科、信息安全、数据科学、人工智能、通信、物联网、自动化、电子信息等)的在校学生、专业教师,或企业员工,小白入门等都适用。 3、该项目不仅具有很高的学习借鉴价值,对于初学者来说,也是入门进阶的绝佳选择;当然也可以直接用于 毕设、课设、期末大作业或项目初期立项演示等。 3、开放创新:如果您有一定基础,且热爱探索钻研,可以在此代码基础上二次开发,进行修改、扩展,创造出属于自己的独特应用。 欢迎下载使用优质资源!欢迎借鉴使用,并欢迎学习交流,共同探索编程的无穷魅力! 基于stl_pg版本实现自己的stl库C++源码.zip基于stl_pg版本实现自己的stl库C++源码.zip基于stl_pg版本实现自己的stl库C++源码.zip基于stl_pg版本实现自己的stl库C++源码.zip基于stl_pg版本实现自己的stl库C++源码.zip基于stl_pg版本实现自己的stl库C++源码.zip基于stl_pg版本实现自己的stl库C++源码.zip基于stl_pg版本实现自己的stl库C++源码.zip基于stl_pg版本实现自己的stl库C++源码.zip基于stl_pg版本实现自己的stl库C++源码.zip基于stl_pg版本实现自己的stl库C++源码.zip

    基于Java的大学生竞赛平台的设计与开发源码.zip

    提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

    经纬度距离计算器,是一款帮助用户计算2点之间的直线距离的小工具

    经纬度距离计算器,是一款帮助用户计算2点之间的直线距离的小工具。 当我们的日常生活中,或者工作中需要通过2点之间经纬度计算距离时,就可以使用这个工具了 此工具不用按照.zip

    基于python的运动员数据分析源码.zip

    基于python的运动员数据分析源码.zip 基于python的运动员数据分析源码.zip基于python的运动员数据分析源码.zip基于python的运动员数据分析源码.zip基于python的运动员数据分析源码.zip基于python的运动员数据分析源码.zip基于python的运动员数据分析源码.zip基于python的运动员数据分析源码.zip基于python的运动员数据分析源码.zip基于python的运动员数据分析源码.zip基于python的运动员数据分析源码.zip基于python的运动员数据分析源码.zip基于python的运动员数据分析源码.zip基于python的运动员数据分析源码.zip基于python的运动员数据分析源码.zip基于python的运动员数据分析源码.zip基于python的运动员数据分析源码.zip基于python的运动员数据分析源码.zip基于python的运动员数据分析源码.zip基于python的运动员数据分析源码.zip基于python的运动员数据分析源码.zip

    cryptography-41.0.7-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    基于易安卓打造的蓝牙开关,手机和蓝牙模块通信

    安卓期末大作业题目 易安卓编写的,说编写其实我只是修改了其中的一些内容,主要的部分都是易锦老师视频里的那个软件,不过我已经懂得了那些命令,(后面有工程文件,如果不 懂,可以去找易锦老师的视频来看,如果找不到,我这存的有),两张界面和代码截图,非常简单,功能也很简单,程序前后修改了两次主要地方,主要原因是测试 的时候发现第一种程序会出现错误,在单片机哪里会仔细说明! 操作界面,很简单,打开之后打开蓝牙,然后点击搜索设备,找到你的模块名字,点击之后就可以连接了,连接之后下面会显示蓝牙的名称和地址信息

    Java开发案例-springboot-35-整合TLog实现分布式日志标记追踪-源代码+文档.rar

    Java开发案例-springboot-35-整合TLog实现分布式日志标记追踪-源代码+文档.rar Java开发案例-springboot-35-整合TLog实现分布式日志标记追踪-源代码+文档.rar Java开发案例-springboot-35-整合TLog实现分布式日志标记追踪-源代码+文档.rar Java开发案例-springboot-35-整合TLog实现分布式日志标记追踪-源代码+文档.rar Java开发案例-springboot-35-整合TLog实现分布式日志标记追踪-源代码+文档.rar Java开发案例-springboot-35-整合TLog实现分布式日志标记追踪-源代码+文档.rar

    MATLAB是一种高级的编程语言和交互式环境

    matlab仿真

    南京邮电大学实验作业之民航票务管理系统+源码

    南京邮电大学c 实验2 南京邮电大学实验作业之民航票务管理系统+源码 南京邮电大学实验作业之民航票务管理系统+源码 南京邮电大学实验作业之民航票务管理系统+源码 Date类 判断日期格式 Flight类 Add Delete Set Find 晚点 UI Login Admin user Sort 票务管理 退票 订票 取票 诚信系统 用户账户系统

    基于Java的宠物交易平台源码.zip

    提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

    nginx-flv-windows

    集成了nginx-http-flv-module。 利用笔记本本地摄像头,通过 ffmpeg +nginx 实现rtmp推流, 得到flv流地址可用

    mmexport1717129884184.jpg

    mmexport1717129884184.jpg

Global site tag (gtag.js) - Google Analytics