切点、切面:@Aspect、@PointCut
@Aspect 定义一个切面 public class LogAspect { // Service层切点 切点,所有被注解ServiceLog标注的方法,
@Pointcut("@annotation(com.xe.demo.common.annotation.ServiceLog)") public void serviceAspect() { }
// 增强,在serviceAspect执行完并且抛出异常执行
@AfterThrowing(pointcut = "serviceAspect()", throwing = "e")
public void doAfterThrowing(JoinPoint joinPoint, Throwable e) {
getLog(joinPoint, e);
}
}
举个例子:
一个类(Show)里面有一个表演(display)的方法,在表演之前,应该有致辞(say)的方法,在表演之后,应该有鼓掌(hand)的方法。
为了高内聚低耦合,表演的方法应该单独封装在一个类里面,致辞和鼓掌的方法应该另外封装,但在调用时必须按照顺序来调用执行。这时候就需要设置切面和切点了!