频道栏目
首页 > 资讯 > 其他 > 正文

Spring-AOP 通过配置文件实现 后置增强

17-08-16        来源:[db:作者]  
收藏   我要投稿

概述 实例

概述

后置增强在目标方法调用后执行.

实例

例如上面的例子中,在服务生每次服务后,也需要向客人问候,可以通过后置增强来实施这一要求,步骤如下:

创建业务接口类:Waiter.java
创建业务实现类:NativeWaiter.java
创建业务增强类:GreetingAfterAdvice.java
创建配置文件:conf-advice.xml
创建增强测试类:AfterReturingAdviceTest.java

这里写图片描述

业务接口类

package com.xgj.aop.spring.advice.afterRetruingAdivce;

public interface Waiter {

    void greetTo(String name);

    void serverTo(String name);
}

业务实现类

package com.xgj.aop.spring.advice.afterRetruingAdivce;

public class NaiveWaiter implements Waiter {

    @Override
    public void greetTo(String name) {
        System.out.println("greetTo " + name);
    }

    @Override
    public void serverTo(String name) {
        System.out.println("serverTo " + name);
    }

}

业务增强类

package com.xgj.aop.spring.advice.afterRetruingAdivce;

import java.lang.reflect.Method;

import org.springframework.aop.AfterReturningAdvice;

public class GreetingAfterAdvice implements AfterReturningAdvice {

    /**
     * 后置增强代码实现,在目标方法执行后调用
     * 
     * @param returnValue
     *            代理返回对象
     * @param method
     *            目标对象方法
     * @param args
     *            目标对象方法参数
     * @param target
     *            目标对象
     * @throws Throwable
     */
    @Override
    public void afterReturning(Object returnValue, Method method,
            Object[] args, Object target) throws Throwable {

        System.out.println("please enjoy youself,Sir!");
    }

}

在配置文件中对其进行配置

interceptorNames 是String[]类型的,它接收增强Bean的名称而非增强Bean的实例。这是因为ProxyFactory内部在省城代理类时,需要使用增强Bean得嘞,而非增强Bean的实例,以织入增强类中所写的横切代码逻辑。

测试类

package com.xgj.aop.spring.advice.afterRetruingAdivce;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class AfterReturingAdviceTest {

    @Test
    public void test() {
        ApplicationContext ctx = new ClassPathXmlApplicationContext(
                "classpath:com/xgj/aop/spring/advice/afterRetruingAdivce/conf-advice.xml");

        Waiter waiter = ctx.getBean("waiter", Waiter.class);
        waiter.greetTo("Xiao");
        waiter.serverTo("GongJiang");
    }

}

运行结果

这里写图片描述

可以看到,前置、后置增强中的逻辑都成功的织入到目标类NaiveWaiter方法所对应的连接点上。

相关TAG标签
上一篇:java数据结构与算法-递归解决汉诺塔问题
下一篇:Android架构组件
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站