Spring AOP 简化笔记(一)

2017-07-04  本文已影响0人  LeeSpringFly

文件目录

concert
|- ConcertConfig
|- Performance
|- PerformanceImpl
|- Audience

切点表达式

       返回任意类型     方法所属类        方法   使用任意参数
                |-||-----------------| |-----||--|
       execution(* concert.Performance.perform(..))
       |-------| |-------------------------------|
在方法执行时触发              指定方法

编写配置

@Configuration
@EnableAspectJAutoProxy
@ComponentScan
public class ConcertConfig {
}

编写切点

public interface Performance {
    public void perform();
}
@Component
public class PerformanceImpl implements Performance {
    @Override
    public void perform() {
        System.out.println("perform()");
    }
}

编写切面

@Aspect
@Component
public class Audience {

    @Before("execution(* concert.Performance.perform(..))")
    public void silenceCellPhones() {
        System.out.println("Silencing cell phones");
    }

    @Before("execution(* concert.Performance.perform(..))")
    public void takeSeats() {
        System.out.println("Taking seats");
    }

    @AfterReturning("execution(* concert.Performance.perform(..))")
    public void applause() {
        System.out.println("CLAP CLAP CLAP!!!");
    }

    @AfterReturning("execution(* concert.Performance.perform(..))")
    public void demandRefund() {
        System.out.println("Demanding a refund");
    }
}

切面--简化切面编码(@Pointcut注解)

@Aspect
@Component
public class Audience {

    @Pointcut("execution(* concert.Performance.perform(..))")
    public void performance() {

    }

    @Before("performance()")
    public void silenceCellPhones() {
        System.out.println("Silencing cell phones");
    }

    @Before("performance()")
    public void takeSeats() {
        System.out.println("Taking seats");
    }

    @AfterReturning("performance()")
    public void applause() {
        System.out.println("CLAP CLAP CLAP!!!");
    }

    @AfterReturning("performance()")
    public void demandRefund() {
        System.out.println("Demanding a refund");
    }
}

切面--环绕通知(@Around注解)

@Aspect
@Component
public class Audience {

    @Pointcut("execution(* concert.Performance.perform(..))")
    public void performance() {
    }

    @Around("performance()")
    public void watchPerformance(ProceedingJoinPoint jp) {
        try {
            System.out.println("Silencing cell phones");
            System.out.println("Taking seats");
            jp.proceed();
            System.out.println("CLAP CLAP CLAP!!!");
            System.out.println("Demanding a refund");
        } catch (Throwable throwable) {
            throwable.printStackTrace();
        }
    }
}

测试

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {ConcertConfig.class})
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class PerformanceImplTest { 

    @Autowired
    private Performance p;

    @Test
    public void testPerform() throws Exception {
        p.perform();
    }
} 
Silencing cell phones
Taking seats
perform()
CLAP CLAP CLAP!!!
Demanding a refund

Process finished with exit code 0
上一篇下一篇

猜你喜欢

热点阅读