Spring 基于 Aspect 注解的增强实现

来源:互联网 发布:2k16捏脸数据 姚明 编辑:程序博客网 时间:2024/05/17 04:28

定义基本实体类

package com.advice;/** * @author Duoduo * @version 1.0 * @date 2017/4/25 23:41 */public class Performer {    public void doPerform() {        System.out.println("Performer do perform ....................... ");    }}

定义基于注解的增强类

package com.advice;import org.aspectj.lang.ProceedingJoinPoint;import org.aspectj.lang.annotation.*;/** * @author Duoduo * @version 1.0 * @date 2017/4/25 23:42 */@Aspect//定义切面public class Audience {    //定义切点    @Pointcut("execution(* com.advice.Performer.doPerform(..))")    public void doPerform(){}    @Before("doPerform()")    public void takeSeas() {        System.out.println("The audience is taking their seats.");    }    @Before("doPerform()")    public void turnOffPhone() {        System.out.println("The audience is turn off their cellphone.");    }    @AfterReturning("doPerform()")    public void applaund() {        System.out.println("CLAP CLAP CLAP CLAP ...");    }    @AfterThrowing("doPerform()")    public void demandRefund() {        System.out.println("Boo! we want our money back!");    }    @Around("doPerform()")    public void watchPerfomance(ProceedingJoinPoint joinPoint) {        try {            Long start = System.currentTimeMillis();            joinPoint.proceed();            long end = System.currentTimeMillis();            System.out.println("The performance took "+(end-start)+" milliseconds");        } catch (Throwable throwable) {            throwable.printStackTrace();        }    }}

Spring 自动代理配置

<!-- aop 增强自动代理 --><aop:aspectj-autoproxy/><bean id="audience" class="com.advice.Audience"/><bean id="performer" class="com.advice.Performer"/>

Junit测试

@Test    public void testDoPerform() throws Exception {        ApplicationContext context = new ClassPathXmlApplicationContext("classpath:smart-context.xml");        //代理为指向Interface的代理        Performer performer = (Performer) context.getBean("performer");        System.out.println("+++++++++++++++++++++++++++++++++");        performer.doPerform();    }

测试结果

+++++++++++++++++++++++++++++++++2017-04-26 20:51:16,980 DEBUG [main] (AbstractBeanFactory.java:251) - Returning cached instance of singleton bean 'audience'The audience is taking their seats.The audience is turn off their cellphone.Performer do perform ....................... The performance took 91 millisecondsCLAP CLAP CLAP CLAP ...
0 0
原创粉丝点击