详解Spring基于Aspect注解的增强实现

整理文档,搜刮出一个Spring 基于 Aspect 注解的增强实现的代码,稍微整理精简一下做下分享

专注于为中小企业提供成都做网站、成都网站设计服务,电脑端+手机端+微信端的三站合一,更高效的管理,为中小企业广信免费做网站提供优质的服务。我们立足成都,凝聚了一批互联网行业人才,有力地推动了超过千家企业的稳健成长,帮助中小企业通过网站建设实现规模扩充和转变。

定义基本实体类

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 自动代理配置





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 milliseconds
CLAP CLAP CLAP CLAP ...

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持创新互联。


分享名称:详解Spring基于Aspect注解的增强实现
文章源于:http://scyanting.com/article/gicghd.html