Aop的一个测试demo
//功能接口
package com.zzg.chapter2.October_sixteen.chapter4;
public interface Performance {
void perform();
}
//实现类
package com.zzg.chapter2.October_sixteen.chapter4;
import org.springframework.stereotype.Component;
@Component
public class PerformanceImpl implements Performance{
@Override
public void perform() {
System.out.println("------------表演内容0----------------");
}
}
//切面
package com.zzg.chapter2.October_sixteen.chapter4;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;
@Aspect
public class Audience {
//简化后面方法需要使用的切点表达式
@Pointcut("execution(* com.zzg.chapter2.October_sixteen.chapter4.Performance.perform(..))")
public void performance(){}
@Before("performance())")
public void silenceCellPhones(){
System.out.println("Before---Silencing cell phones");
}
@Before("execution(* com.zzg.chapter2.October_sixteen.chapter4.Performance.perform(..))")
public void takeSeats(){
System.out.println("Before---Taking seats");
}
@Around("performance()")
public void watchPerformance(ProceedingJoinPoint jp){
try {
System.out.println("Around---Silencing cell phones");
System.out.println("Around---Taking seats");
jp.proceed();
System.out.println("Around---CLAP CLAP CLAP!!!");
} catch (Throwable throwable) {
System.out.println("Around---Demanding a refund");
}
}
@AfterReturning("execution(* com.zzg.chapter2.October_sixteen.chapter4.Performance.perform(..))")
public void applause(){
System.out.println("AfterReturning---CLAP CLAP CLAP");
}
@AfterThrowing("execution(* com.zzg.chapter2.October_sixteen.chapter4.Performance.perform(..))")
public void demandRefund(){
System.out.println("AfterThrowing---Demanding a refund");
}
}
//配置类
package com.zzg.chapter2.October_sixteen.chapter4;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.EnableAspectJAutoProxy;
@Configuration
@ComponentScan
//启用AspectJ自动代理
@EnableAspectJAutoProxy
public class ConcertConfig {
//因为Audience类上未注解@Component,所有这里要显示声明Aspect注解的类
@Bean
public Audience audience(){
return new Audience();
}
}
//测试类
package com.zzg.chapter2.October_sixteen.chapter4;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringRunner;
@RunWith(SpringRunner.class)
@ContextConfiguration(classes = ConcertConfig.class)
public class AopTest {
@Autowired
private Performance performance;
@Test
public void test() {
performance.perform();
}
}
//AspectJ的maven依赖
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>1.8.6</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.8.6</version>
</dependency>
测试结果