spring学习-切面

一、注解创建切面

@Aspect: 表明该类为切面
@Before: 通知方法会在目标方法调用之前执行
@After: 通知方法会在目标方法返回或抛出异常后执行
@AfterReturning: 通知方法会在目标方法返回后执行
@AfterThrowing: 通知方法会在抛出异常后执行
@Around: 通知方法将目标方法封装起来
@Pointcut: 定义切点表达式
@EnableAspectJ-AutoProxy: 启用自动代理

execution(): 切点表达式
args(): 执行方法参数
with(): 指定匹配类型

public interface Performance{
    public void perform();
    public void playTrack(int i);
}
@Aspect
public class Audience{
    @Pointcut("execution(** concert.Performance.perform(..))")
    public void perform(){}
    @Pointcut("execution(** concert.Performance.playTrack(int)) && args(trackNum)")
    public void playTrack(int trackNum){}

    @Before("perform()")
    public void silenceCellPhones(){
        System.out.println("Silencing cell phones");
    }
    @Before("playTrack(trackNum)")
    public void playTrack(int trackNum){
        System.out.println("trackNum");
    }
    @AfterReturning("perform()")
    public void applause(){
        System.out.println("CLAP CLAP CLAP");
    }
    @AfterThrowing("perform()")
    public void demandRefund(){
        System.out.println("Demanding a refund");
    }
}
@Configuration
@EnableAspectJ-AutoProxy
@ComponentScan
public class ConcertConfig{
    @Bean
    public Audience audience(){
        return new Audience();
    }
}

二、XML声明切面

: 顶级AOP配置元素
: 定义一个切面
: 定义一个切点
: 启用自动代理
: AOP前置通知
: AOP后置通知(不管被执行方法是否执行成功)
: AOP返回通知
: AOP异常通知

public interface Performance{
    public void perform();
    public void playTrack(int i);
}
public class Audience{
    public void perform(){}
    public void playTrack(int trackNum){}

    public void silenceCellPhones(){
        System.out.println("Silencing cell phones");
    }
    public void silenceCellPhones(int trackNum){
        System.out.println("trackNum");
    }
    public void applause(){
        System.out.println("CLAP CLAP CLAP");
    }
    public void demandRefund(){
        System.out.println("Demanding a refund");
    }
}

    
        
        
        
        
        
        
    

你可能感兴趣的:(spring学习-切面)