Spring 后置通知

      Spring 的后置通知虽然如其名字那样,通知在方法调用之后织入。但准确的说,通知是在方法返回值之后和方法返回到调用地点之前被织入。我们可以通过Spring 自带的AfterReturningAdvice 接口轻松的实现方法的织入。AfterReturningAdvice 接口提供了afterReturning 方法来实现通知,即在afterReturning 方法中定义通知。afterReturning 方法接受目标方法的返回值,目标方法,目标方法需要的参数和目标对象。从参数列表中我们可以知道我们无法再对目标方法的返回值进行更改(如果需要对目标方法的返回值进行更改可以通过MehtodInterceptor 接口来实现)。

     PS:如果目标方法没有返回值,那么afterReturning 方法接受到的目标方法返回值为null,并不抛出异常。

     例子如下:

     1)后置通知代码

public class After implements AfterReturningAdvice
{
    public void afterReturning(Object returnValue, Method method, Object[] args, Object target) {
        System.out.println("After.afterReturning()");
        System.out.println("return value: " + returnValue);
        System.out.println("method name: " + method.getName());
        Type[] type = method.getGenericParameterTypes();
        for(int i = 0; i < type.length; i++) {
            System.out.println(type[i].toString() + ": " + args[i]);
        }
        System.out.println("target: " + target.toString());
        //返回值更改
        //无效
        returnValue = new String("after");
        System.out.println("");
    }
}

     2)目标对象

public class Target implements Advice   
{   
    public String test(int i, String s, float f) {   
        System.out.println("Target.test()");   
        System.out.println("target: " + this);   
        StringBuffer buf = new StringBuffer();   
        buf.append( "i = " + i);   
        buf.append( ", s = \"" + s + "\"");   
        buf.append( ", f = " + f);   
        return buf.toString();   
    }   
}  

    3)接口定义

public interface Advice   
{   
    String test(int i, String s, float f);   
}  

    4)配置文件

<beans>
    <bean id="after" class="spring.After"/>

    <bean id="aop" class="org.springframework.aop.framework.ProxyFactoryBean">
        <property name="proxyInterfaces" value="spring.Advice" />
        <property name="interceptorNames">
            <list>
                <value>after</value>
            </list>
        </property>
        <property name="target">
            <bean class="spring.Target" />
        </property>
    </bean>
</beans>

 

  

   

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值