SpringAop深度解析

Aop的基本概念

Aop面向切面编程,在方法之前和之后实现处理 应用场景在于:日志打印、事务实现、安全等。
下面展示五个通知的例子

注意:ProceedingJoinPoint只能在环绕通知中拿到,其他的通知拿不到的,其他通知拿的是JoinPoint
package com.mayikt.aspect;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;
import org.springframework.context.annotation.EnableAspectJAutoProxy;
import org.springframework.stereotype.Component;

/**
 * @Description:
 * @Author: ChenYi
 * @Date: 2020/07/05 08:11
 **/
@Aspect
@Component
@EnableAspectJAutoProxy
public class MyAspect {
    @Pointcut("execution (* com.mayikt.service..*.*(..))")
    public void pointCut() {

    }

    @Before("pointCut()")
    public void before(JoinPoint joinPoint) {
        System.out.println("前置通知执行>>>>");
    }

    @After("pointCut()")
    public void after() {
        System.out.println("后置通知执行>>>>");
    }

    @AfterReturning("pointCut()")
    public void afterReturning() {
        System.out.println("运行通知执行>>>>");
    }

    @AfterThrowing("pointCut()")
    public void afterThrowing(JoinPoint joinPoint) {
        System.out.println("异常通知执行>>>>");
    }


    @Around("pointCut()")
    public Object around(ProceedingJoinPoint joinPoint) throws Throwable {
        System.out.println("环绕通知之前执行>>>>");
        joinPoint.proceed();
        System.out.println("环绕通知之后执行>>>>>");
        return null;
    }
}


源码流程

  1. @EnableAspectJAutoProxy开始Aop的权限
  2. @Import(AspectJAutoProxyRegistrar.class)
  3. AspectJAutoProxyRegistrar手动注册,切面类
  4. 将该类AnnotationAwareAspectJAutoProxyCreator注册到ioc容器中,beanId为org.springframework.aop.config.internalAutoProxyCreator,该类是BeanPostProcessor的子类
  5. BeanPostProcessors是对我们bean的初始化方法实现增强,init方法之前和之后处理

AnnotationAwareAspectJAutoProxyCreator

前置:没有处理任何的事情
后置:postProcessAfterInitialization使用后置处理器实现代理对象创建,因为需要等对象都初始化完成了再创建代理类对象,所以代理的操作时放在后置中的,创建代理对象,如果被代理的这个类如果实现了接口的话,就使用JDK动态代理,如果没有实现接口则使用cglib
AbstractAutoProxyCreator这个类中
参考:蚂蚁课堂

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值