`

Spring RegexpMethodPointcutAdvisor和NameMatchMethodPointcutAdvisor

 
阅读更多
http://www.cnblogs.com/65702708/archive/2012/08/14/2638514.html

Spring AOP中有两个PointcutAdvisor

      ——RegexpMethodPointcutAdvisor和 NameMatchMethodPointcutAdvisor,它们都在org.springframework.aop.support包中,

都可以过滤要拦截的方法,配置方法也大致相同,其中一个最主要的区别
RegexpMethodPointcutAdvisor:需要加上完整的类名和方法名,例如:com.xw.methodname或com.*.methodname或.*methodname。需要加上完整类名,可以用Spring提供的匹配方式

NameMatchMethodPointcutAdvisor:只需要方法名,不用加类名:*methodname。


一个配置例子:
<context:annotation-config />
      <context:component-scan base-package="com.shine" />        
       
      <bean id="printer" class="com.shine.PrinterImpl"/>     
      <bean id="afterPrinter" class="com.shine.AfterPrinter"/>
       
      <!-- 配置一个拦截器 (切入点对象,确定何时何地调用拦截器)  -->
      <bean id="pointcutAdvisor" class="org.springframework.aop.support.RegexpMethodPointcutAdvisor">
         <!-- [通知,特定连接点所采取的动作] -->
         <!-- 加入切面,切面为当执行完print方法后 再执行加入的切面 -->
         <property name="advice">
            <ref local="afterPrinter"/>
         </property>
         <!-- 要拦截的方法,可根据Spring提供匹配方式进行拦截  -->
         <property name="pattern">
                <!--  .表示符合任何单一字元
                 ###  +表示符合前一个字元一次或多次
                 ###  *表示符合前一个字元零次或多次
                 ###  \Escape任何Regular expression使用到的符号
                 -->
                 <!-- .*表示前面的前缀(包括包名) 表示print方法-->
                <value>.*print</value>
         </property>
      </bean>
       
      <!-- ### 代理工程  -->
      <bean id="proxyFactory" class="org.springframework.aop.framework.ProxyFactoryBean">
         <!-- 指定目标对象,目标对象是PrinterImpl对象 -->
         <property name="target">
            <ref local="printer"/>
         </property>
         
         <!-- 该目标中加入拦截器pointcutAdvisor -->
         <property name="interceptorNames">
            <list>
                <value>pointcutAdvisor</value>
            </list>
         </property>
      </bean>

RegexpMethodPointcutAdvisor表示通过正则表达式进行切点描述的切面,它有一个pattern属性用来指定增强要应用到哪些类的哪些方法,也可以通过patterns属性指定多个表达式进行匹配。有一个advice属性用来表示要应用的增强,这样就能表示一个完整的切面了。
我们举几个例子用进一步认识正则表达式在配置匹配方法上的具体应用:
    示例1:.*set.*表示所有类中的以set前缀的方法,如com.baobaotao.Waiter.setSalary(),
Person.setName()等;
    示例2:com.advisor.*表示com.advisor包下所有类的所有方法;
    示例3:com.service.*Service.* 牢匹配com.service包下所有类名以Service结尾的类的所有方法,如com.service.UserService.save(User user)、com.service.ForumService.update(Forum forum)等方法;
    示例4:com.service.*.save.+ 匹配com.service包中所有类中所以save为前缀的方法。如匹配com.service.UserService类的saveUser()和saveLoginLog()方法,但不匹配该类中的save()方法。


1.RegexpMethodPointcutAdvisor
    <!--  将拦截器包装成Advisor-->
       <bean id="runAdvisor" class="org.springframework.aop.support.RegexpMethodPointcutAdvisor">
      <!--  advice属性确定处理bean-->
      <property name="advice">
       <bean class="spring.aop.LoggerAdvice"/>
      </property>
      <property name="patterns">
       <list>
        <!--正则表达式-->
        <value>.*tst</value>
       </list>
      </property>
     </bean>
     
    <bean id="proxyBean_regexpMethod"  class="org.springframework.aop.framework.ProxyFactoryBean">
    <property name="proxyInterfaces" value="spring.aop.ITest">
    </property>
    <property name="interceptorNames">
    <list>
    <value>runAdvisor</value>
    </list>
    </property>
    <property name="target" ref="testproxyfactorybean"></property>
    </bean>




2.NameMatchMethodPointcutAdvisor
    <!--  将拦截器包装成Advisor,该对象还确定代理对怎样的方法增加处理-->
       <bean id="runAdvisor_Name" class="org.springframework.aop.support.NameMatchMethodPointcutAdvisor">
      <!--  advice属性确定处理bean-->
      <property name="advice">
       <!-- 此处的处理bean定义采用嵌套bean,也可引用容器的另一个bean-->
       <bean class="spring.aop.LoggerAdvice"/>
      </property>
      <!--  patterns确定正则表达式模式-->
      <property name="mappedNames">
       <list>
        <!--  确定正则表达式列表-->
        <value>tst</value>
       </list>
      </property>
     </bean>
分享到:
评论

相关推荐

    开源框架 Spring Gossip

    NameMatchMethodPointcutAdvisor RegExpMethodPointcutAdvisor ControlFlowPointcut Pointcut 介面 Pointcut 交集、联集操作 Introduction 为特殊的 Advice,它影响的不是方法的流程,...

    spring学习笔记2

    10. **预定义Pointcut Advisor**:Spring提供了几种预定义的Pointcut Advisor,如`NameMatchMethodPointcutAdvisor`和`RegexpMethodPointcutAdvisor`,它们分别基于方法名匹配和正则表达式来确定切入点。 11. **...

    spring 的自动代理

    4. **Bean `advisor`** - 这是一个 `RegexpMethodPointcutAdvisor`,它结合了切点(Pointcut)和 Advice。`pattern` 属性用于指定哪些方法应该被拦截,这里使用通配符 `.*.*` 表示匹配所有方法。`advice` 属性引用了...

    spring

    Spring是一个开源的Java平台,旨在简化企业级应用程序的开发,它提供了全面的编程和配置模型,使开发者能够更高效地构建可维护、可扩展的应用程序。Spring的核心特性包括依赖注入(DI)、面向切面编程(AOP)、数据...

    SPRING API 2.0.CHM

    NameMatchMethodPointcutAdvisor NameMatchTransactionAttributeSource NamespaceHandler NamespaceHandlerResolver NamespaceHandlerSupport NativeJdbcExtractor NativeJdbcExtractorAdapter ...

    spring拦截器的简单例子.docx

    &lt;bean id="puradvice" class="org.springframework.aop.support.RegexpMethodPointcutAdvisor"&gt; *logincheck.*"/&gt; &lt;bean id="autoproxy" class="org.springframework.aop.framework.autoproxy....

Global site tag (gtag.js) - Google Analytics