zoukankan      html  css  js  c++  java
  • 用ProxyFactoryBean创建AOP代理

      Spring的Advisor是Pointcut和Advice的配置器,它是将Advice注入程序中Pointcut位置的代码。org.springframework.aop.support.DefaultPointcutAdvisor是最通用的Advisor类。在Spring中,主要通过XML的方式来配置Pointcut和Advice。

      使用Spring提供的类org.springframework.aop.framework.ProxyFactoryBean是创建AOP的最基本的方式。

    一、使用ProxyFactoryBean代理目标类的所有方法

      在Spring中,ProxyFactoryBean是在XML中进行配置的。示例代码如下:

     1 <?xml version = "1.0" encoding="UTF-8"?>
     2 <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
     3 "http://www.springframwork.org/dtd/spring-beans.dtd">
     4 <beans>
     5     <bean id="log"  class = "com.gc.action.LogAround"/>
     6   <bean id="timeBook" class = "com.gc.action.TimeBook"/>
     7   <!--设定代理类-->
        <bean id="logProxy" class="org.springframework.aop.framework.ProxyFactoryBean"> 8   <!--这里代理的是接口--> 9    <property name="proxyInterfaces"> 10 <value>com.gc.impl.TimeBookInterface</value> 11 </property> 12 <!--程序中的Advice--> 13 <property name="target"> 14 <ref bean="timeBook"/> 15 </property> 16   <!--是ProxyFactoryBean要代理的目标类--> 17   <property name="interceptorNames"> 18     <list> 19       <value>log</value> 20     </list> 21   </property> 22 </bean> 23 </beans>

    id为logProxy的Bean,就是ProxyFactoryBean

    ProxyFactoryBean的proxyInterfaces属性:要代理的接口

    ProxyFactoryBean的target属性:要代理的目标类,这个目标类实现了上面的接口

    ProxyFactoryBean的interceptorNames属性:在代理的目标类中插入的Advice

    ProxyFactoryBean的proxyTargetClass属性:true说明ProxyFactoryBean要代理的不是接口类,而是CGLIB方式来进行代理

    使用ProxyFactoryBean代理目标类的指定方法

      使用org.springframework.aop.support.RegexpMethodPointcutAdvisor类,示例代码如下:

     1 <?xml version="1.0" encoding="UTF-8">
     2 <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
     3 <beans>
     4     <bean id="log" class="com.gc.action.LogAround"/>
     5     <bean id="timeBook" class="com.gc.action.TimeBook"/>
     6     <bean id="logAdvisor" class="org.springframework.aop.support.RegexpMethodPointcutAdvisor">
     7         <property name="advice">
     8             <ref bean="log"/>
     9         </property>
    10         <!--指定要代理的方法-->
    11         <property name="patterns">
    12             <value>.*doAuditing.*</value>
    13         </property>
    14      </bean>
    15      <!--设定代理类-->
    16      <bean id="logProxy" class="org.springframework.aop.framework.ProxyFactoryBean">
    17         <property name="proxyInterfaces">
    18              <value>com.gc.impl.TimeBookInterface</value>
    19         </property>
    20         <property name="target">
    21             <ref name="timeBook"/>
    22        </property> 
    23        <property name="interceptorNames"> 
    24              <list>
    25                   <value>logAdvisor</value>
    26             </list>
    27        </property>
    28      </bean>     
    29 </beans>

    id为logAdvisor的Bean中设定Advice和要指定的方法。

    logAdivsor的advice属性指定Advice

    logAdvisor的patterns属性指定要代理的方法,patterns的属性值使用的是正则表达式

  • 相关阅读:
    关于在windows10中的vmware9.0里面安装的ubuntukylin15.04和windows共享目录的一些反思
    关于最近工程的一些心得
    关于springMVC中component-scan的问题以及springmvc.xml整理
    初学node.js有感三
    初学node.js有感二
    初学node.js有感一
    编译原理——算符优先分析文法(附源代码)
    数据结构与算法系列研究九——排序算法的一些探讨
    LeetCode: Same Tree
    LeetCode: Symmetric Tree
  • 原文地址:https://www.cnblogs.com/victoria-c/p/5737601.html
Copyright © 2011-2022 走看看