通过注解方式实现代理
1,自定义一个注解
2.
execution方式
@Aspect
@Component
public class WebLogAcpect {
@Autowired
private RizhiService rizhiService;// 添加日志用
@Autowired
private MapCache cache;
// 定义切点一:访问所有接口增加日志记录,除了登陆接口
@Pointcut("execution(public * com.henu.controller.*.*(..)) && !execution(public * com.henu.controller.LoginController.*(..))")
public void webLog() {
}
@Before("webLog()")
public void doBefore(JoinPoint joinPoint) {
System.out.print("这是前置通知");
}
}
关于环绕通知和前,后通知
@Around用ProceedingJoinPoint
@Before,@After用JoinPoint、
ProceedingJoinPoint时JoinPoint的子类,额外提供了proceed方法,让切点继续执行,然后才可以进行环绕通知的“后置通知”
1.环绕通知 ProceedingJoinPoint 执行proceed方法的作用是让目标方法执行,这也是环绕通知和前置、后置通知方法的一个最大区别。
2.简单理解,环绕通知=前置+目标方法执行+后置通知,proceed方法就是用于启动目标方法执行的
2023.3.16补充
切点执行顺序介绍
@Around = @Before + @AfterReturning 也就是说当切点出现异常只会执行前置通知