55.Spring的 Aop的完整实现流程?

55.Spring的 Aop的完整实现流程?

Aop的实现大致分为三大步:JavaConfig
当@EnableAspectJAutoProxy 会通过@Import注册一个BeanPostProcessor处理AOP

1.解析切面: 在Bean创建之前的第一个Bean后置处理器会去解析切面(解析切面中通知、切点,一个通知就会解析成一
个advisor(通知、切点))

2.创建动态代理 正常的Bean初始化后调用BeanPostProcessor 拿到之前缓存的advisor ,再通过advisor中pointcut
判断当前Bean是否被切点表达式匹配,如果匹配,就会为Bean创建动态代理(创建方式1.jdk动态代理2.cglib)。

3.调用:拿到动态代理对象, 调用方法 就会判断当前方法是否增强的方法, 就会通过调用链的方式依次去执行通知.

在这里插入图片描述

额外扩展

1、AOP相关术语

  • 切面Aspect:

即添加的额外的业务逻辑

  • 连接点JointPoint:

即切面可以被应用在哪些方法上,这些方法都可以统称为连接点

  • 切点PointCut:

实际被切入的方法。连接点是一个逻辑上的概念,表示可以被切入的地方。切点是真实要被切入的地方。

  • 通知Advice:

描述了切面是什么以及在什么位置执行。即结合了Aspect和PointCut。springAOP提供的Advice有5种,分别是前置通知,后置通知,环绕通知,异常通知,返回通知

2、AOP示例用法
原始业务逻辑SomeService

//原始业务方法逻辑
@Component
public class SomeService {
    public void say(){
        System.out.println("原始方法");
    }
}

自定义的切面

@Component
@Aspect
public class MyAdvice {

    //配置切点
    @Pointcut("execution(* ldd.relearn.app.aop.SomeService.*(..))")
    public void pointCut() {

    }

    //前置通知
    @Before("pointCut()")
    public void before() {
        System.out.println("自定义前置通知");
    }

    //后置通知
    @After("pointCut()")
    public void after() {
        System.out.println("自定义后置通知");
    }
}

运行类

public class App 
{
    public static void main( String[] args )
    {
        AbstractApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
        SomeService someService = (SomeService)applicationContext.getBean("someService");
        someService.say();
        
    }
}

当运行 someService.say()时,输出效果如下图所示。这就是融入了AOP的效果。
在这里插入图片描述

  • 34
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 26
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

飞翔的佩奇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值