springaop术语概述及aop中常见通知的实现(前置,后置,环绕,异常)

来源:互联网 发布:淘宝怎么虚拟试穿衣服 编辑:程序博客网 时间:2024/05/21 21:01

springaop术语概述及aop中常见通知的实现(前置,后置,环绕,异常)

AOP术语概述

n  切面:需要实现的交叉功能

n  连接点:应用程序执行过程中插入切面的地点:此处可是方法调用、异常抛出甚至是要修改的字段

n  通知:通知切面的实际实现。他通知应用系统新的行为,通知在连接点插入到应用系统中

n  切入点:定义了通知应该应用在那些连接点。通常通过指定类名和方法名,或匹配类名和方法名式样的正则表达式来指定切入点。

n  引入:允许为已存在类添加新方法和属性

n  目标对象:被通知对象。即可使编写的类也可是添加定制行为的第三方类。

n  代理将通过应用到目标对象后创建的对象。

n  织入:将通知应用到目标对象从而创建一个新的代理对象的过程。切面在指定接入点被织入到目标对象中,之如发生在目标对象生命周期的多个点上:

编辑器:切面在目标对象编译时织入(需特殊的编译器)

类装载器:切面在目标对象被载入到JVM时织入(需特殊的类加载器,在类的载入到应用系统之前增强目标对象的字节码)

运行期:切面在应用系统运行时织入(通常,AOP容器将在织入切面时动态生成委托目标对象的代理对象)

前置通知

public class WelcomeAdvice implements MethodBeforeAdvice{

     public voidbefore(Method m,Object[] os,Object target){

        Customer c =(Customer)arg[0];

        System.out.println(c.getName());

     }

}

---------------------------------------------

//创建目标代理对象

<bean id="kwikEMartTarget"class="…ApuKwikEMart" />

<bean id="welcomeAdvice"class="…WelcomeAdvice" />

<bean id="kwikEMart"class="……ProxyFactoryBean">

     <propertyname="proxyInterfaces"><value>……KwikEMart</value></property>

     <propertyname="interceptorNames">

           <list><value>welcomeAdvice</value></list>

     </property>

    <propertyname="target"><ref bean="kwikEMartTarget"/></property>

</bean>

后置通知

  public interface AfterReturningAdvice{

      public void afterReturning(ObjectreturnValue,Method

      m,Object[] os,Object target);

  }

环绕通知

publicinterface MethodInterceptor extends Interceptor{

    Object invoke(MethodInvocation invocation);

}

该接口同前两种通知有两个重要区别:1.该通知能够控制目标方法

是否真的被调用。通过invocation.proceed()方法来调用。

2.该通知可以控制返回的对象。可以返回一个与proceed()方法返回对象完全不同的对象。但要谨慎使用。

异常通知

publicinterface ThrowsAdvice{

}

该接口为标识性接口,没有任何方法,但实现该接口的类必须要有如下形

式的方法:

voidafterThrowing(Throwable throwable);

voidafterThrowing(Method m,Object[] os,Object

target,Throwablethrowable);

第一个方法只接受一个参数:需要抛出的异常。

第二个方法接受异常、被调用的方法、参数以及目标对象。

 

 

原创粉丝点击