• Spring《八》AOP/代理类定义


    Spring通知

    Interception Around通知 MethodInterceptor类(方法执行前后通知)

    Before通知 MethodBeforeAdvice类(方法执行前通知)

    After Returning通知 AfterReturningAdvice类(方法执行后通知)

    Throw通知 ThrowsAdvice类(方法执行抛出异常时通知)

    Introduction通知 IntroductionAdvisor类和IntroductionInterceptor类(方法执行完通知)

    具体事例:

    LogAround implements MethodInterceptor

    TimeBook implements TimeBookInterface

    配置文档   Interception Around通知

     1 <!--以下是使用Spring AOP实现日志-->
     2 <bean id="log" class="com.gc.antion.LogAround"/>
     3 <bean id="timeBook" class="com.gc.action.TimeBook"/>
     4 <bean id="logProxy" class="org.springframework.aop.framework.ProxyFactoryBean">
     5   <property name="proxyInterfaces">
     6     <value>com.gc.impl.TimeBookInterface</value>
     7   </property>
     8   <!--指定要代理的类-->
     9   <property name="interceptorNames">
    10     <list>
    11       <value>log</value>
    12     <list>
    13   </property>
    14 </bean>
    View Code

    测试代码:

    TimeBookInterface timeBookProxy=(TimeBookInterface)actx.getBean("logProxy");
    
    timeBookProxy.doAuditing("张三");

    配置文档   Before通知

     1 <bean id="logBefore" class="com.gc.antion.LogBefore" />
     2 <bean id="logBeforeAdvisor" class="org.springframework.aop.support.RegexpMethodPointcutAdvisor">
     3     <property name="advice"> //指定代理类
     4         <ref bean="logBefore">
     5     </property>
     6     <property name="patterns">//指定需要代理方法
     7        <value>.*doAuditing.*</value>
     8     </property>
     9 </bean>
    10 <bean id="logProxy" class="org.springframework.aop.framework.ProxyFactoryBean">
    11 <property name="proxyInterfaces">
    12 <value>com.gc.impl.TimeBookInterface</value>
    13 </property>
    14 <property name="target">
    15 <ref bean="timeBook">
    16 </property>
    17 <property>
    18 <list>
    19 <value>logBeforeAdvisor</value>
    20 </list>
    21 </property>
    22 </bean>
    View Code

     配置文档   After Returning通知

     1 <bean id="logAfter" class="com.gc.action.LogAfter">
     2 <bean id="logAfterAdvisor" class="org.springframework.aop.support.RegexpMethodPointcutAdvisor">
     3 <property name="advice">
     4 <ref bean="logAfter/>
     5 </property>
     6 <property name="patterns">
     7     <value>.*doAuditing.*</value>
     8 </property>
     9 </bean>
    10 <bean id="logProxy" class="org.springframework.aop.framework.ProxyFactoryBean">
    11 <property name="proxyInterfaces">
    12 <value>com.gc.impl.TimeBookInterface</value>
    13 </property>
    14 <property name="target">
    15 <ref bean="timeBook">
    16 </property>
    17 <!--指定代理类-->
    18 <property name="interceptorNames">
    19 <list>
    20     <value>logAfterAdvisor</value>
    21 </list>
    22 </property>
    23 </bean>
    View Code

    配置定义同上述Before和After文档。

    代理类定义:

  • 相关阅读:
    【算法18】重排数组元素使得所有的奇数位于所有偶数之前
    php函数ob_start()、ob_end_clean()、ob_get_contents()
    php代码调试
    判断文件存在是用file_exists 还是 is_file
    ubuntu屏幕截图工具:scrot,可截鼠标拖曳的矩形区域图形
    mysql常用的技巧
    用户角色权限设计
    解决ubuntu耳机和音箱同时发音
    SSH免密码登录
    IE, Firefox下,checkbox的钩钩一旦勾上,画面再刷新,钩钩还是勾上的解决方案
  • 原文地址:https://www.cnblogs.com/swordyt/p/7049347.html
Copyright © 2020-2023  润新知