1、将业务逻辑和切面类要放到spring容器中,并且注明哪个是切面类(@Aspect);
2、切面类上的通知方法标注通知注解,告诉Spring何时何地运行(@pointcut("execution()"));
3、开启基于注解的AOP模式(@EnableAspectJAutoproxy)。
@EnableAspectJAutoproxy @Configuration public class MainConfigAop { @Bean public MathCal mathCal() { return new MathCal(); } @Bean public LogAspect logAspect() { return new LogAspect(); } }
public class MathCal { public int div(int i,int j) { System.out.println("mathCal.div"); return i/j; } }
@Aspect public class LogAspect { @pointcut("execution(public int com.yyc.bean.MathCal.*(..))") public void pointcut() { } @Before("pointcut()") public void methodStart(JoinPoint joinPoint) { Object[] args = joinPoint.getArgs(); System.out.println(joinPoint.getSignature().getName()+"除法开始。。。参数列表为{"+ Arrays.asList(args)+"}"); } @After("pointcut()") public void methodEnd(JoinPoint joinPoint) { System.out.println(joinPoint.getSignature().getName()+"除法结束。。。"); } @AfterReturning(value = "pointcut()",returning = "result") public void methodReturn(Object result) { System.out.println("除法返回。。。"+result); } @AfterThrowing(value = "pointcut()",throwing = "exception") public void methodException(Exception exception) { System.out.println("除法异常。。。"+exception); } }
div除法开始。。。参数列表为{[1,1]}
mathCal.div
div除法结束。。。
除法返回。。。1