AOP的两种实现方式

通过注解方式实现代理

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 也就是说当切点出现异常只会执行前置通知

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值