首页 > 编程语言 >【Spring AOP】【一】Spring AOP源码解析文章导读

【Spring AOP】【一】Spring AOP源码解析文章导读

时间:2023-02-19 23:12:58浏览次数:37  
标签:连接点 Spring AOP 代理 源码 通知 方法

1  前言

IOC的一些东西我们说过了,这篇我们开始看看AOP,面向切面编程,他也是Spring的一个核心功能,他的作用就是给我们的Bean创建代理对象,进行功能增强,比如我们的事务、日志等,我们主要讲讲他AOP的切入时机,也就是什么时候进场的,以及是怎么解析我们的注解或者在XML里配置的AOP功能,又是怎么代理掉我们的Bean的。

2  AOP相关概念

在看源码之前,我们要先熟悉一下AOP的相关概念,这样能帮助你更好的理解。

  • 连接点(Join point):能够被拦截的地方,Spring AOP 是基于动态代理的,所以是方法拦截的,每个成员方法都可以称之为连接点;

  • 切点(Poincut):每个方法都可以称之为连接点,我们具体定位到某一个方法就成为切点,看成筛子你要选择哪些连接点进行增强,比如根据类筛选、或者某个方法等都可以。

  • 通知(Advice):分前置、后置、异常、环绕、结果通知五种,五种也就是在你方法的某个时机去做什么样的事;

  • 织入(Weaving):将通知添加到目标类的具体连接点上的过程;

  • 切面(Aspect):切面由切点和通知组成,它既包括了横切逻辑的定义、也包括了连接点的定义。

针对通知的话我们又分为5类:

  • 前置通知(Before advice)- 在目标方法调用前执行通知
  • 后置通知(After advice)- 在目标方法完成后执行通知
  • 返回通知(After returning advice)- 在目标方法执行成功后,调用通知
  • 异常通知(After throwing advice)- 在目标方法抛出异常后,执行通知
  • 环绕通知(Around advice)- 在目标方法调用前后均可执行自定义逻辑

3  AOP核心类

AbstractAutoProxyCreator 是AOP的一个核心类,它实现了SmartInstantiationAwareBeanPostProcessor、BeanFactoryAware 接口,实现了代理创建的逻辑,使用AOP代理包装每个合格的bean,并在调用bean本身之前委派给指定的拦截器。

AbstractAdvisorAutoProxyCreator 通用自动代理创建器,它基于检测每个bean的增强器,为特殊的bean构建AOP代理。子类可以重写此findCandidateAdvisors()方法,以返回适用于任何对象的advisor的自定义列表,子类还可以重写继承的AbstractAutoProxyCreator.shouldSkip()方法,以将某些对象排除在自动代理之外。
AspectJAwareAdvisorAutoProxyCreator 扩展 AbstractAdvisorAutoProxyCreator,公开了AspectJ的调用上下文,并在多个增强器来自同一切面时搞清楚AspectJ的建议优先级顺序。

AspectJAwareAdvisorAutoProxyCreator 还有一个子类叫 AnnotationAwareAspectJAutoProxyCreator,子类AnnotationAwareAspectJAutoProxyCreator是用于处理当前应用程序上下文中的所有AspectJ注解方面以及Spring Advisor。如果Spring AOP的基于代理的模型能够应用任何AspectJ注释的类,它们的advisor将被自动识别,这涵盖了方法执行连接点,Spring Advisor的处理遵循AbstractAdvisorAutoProxyCreator中建立的规则。

AspectJAwareAdvisorAutoProxyCreator 实现了 BeanPostProcessor 等上面介绍的接口,主要作用于Bean初始化前后,实例化前后,所有的Bean都被作用到。InstantiationAwareBeanPostProcessor 是 BeanPostProcessor的子接口,但它的调用时间点发生在Bean实例化前,在真正调用doCreateBean()创建bean实例之前执行postProcessBeforeInstantiation()。

4  小结

掌握了相关AOP的概念,那让我们开始进入源码学习吧。

标签:连接点,Spring,AOP,代理,源码,通知,方法
From: https://www.cnblogs.com/kukuxjx/p/17135380.html

相关文章

  • SpringBoot文件上传
    文件上传引入依赖<!--文件上传--><dependency><groupId>commons-fileupload</groupId><artifactId>commons-fileupload</artifact......
  • 【Spring AOP】【二】Spring AOP源码解析-XML方式加载解析过程
    1 前言这篇我们看一下,我们的AOP代码是怎么被Spring加载的进去的,那么分两种一种是XML配置的,一种就是我们常用的注解,我们从源码先看下XML方式的都是怎么被加载解析的。2......
  • Spring-IOC、AOP、事务的说明
    今天来聊一聊我对spring框架的认识,本篇章中不详细讲解具体的使用方法和实现一、spring是什么?spring是一个java语言下的bean管理的基础框架。二、spring的常用功能有那......
  • SpringBoot升级到3.0
    SpringBoot3.0出来有一段时间了,一直没时间来整理,这次来看一下吧。SpringBoot可以轻松创建独立的、生产级的基于Spring的应用程序,您可以“直接运行”。1.SpringBoo......
  • springboot mybatis (关联关系:一对一,一对多,多对多)
    例如这个学生选课的这个:这个里面课程跟老师是1对1的,而老师对课程是1对多的,一个课程只能由一个老师教,而一个老师可以教多个课程对于学生和课程之间是多对多的,一个学生可以......
  • mapper-spring-boot-starter的使用
    <?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:s......
  • Spring Boot
    SpringBoot​ SpringBoot是一个快速开发框架,可以迅速搭建一套基于Spring框架体系的应用,是SpringCloud的基础。​ javaConfiguration用java类替代xml的配置方式。​ ......
  • XXL-JOB 分布式任务调度框架(Cron表达式、环境搭建、整合SpringBoot、广播任务与动态分
    (目录)xxl-Job分布式任务调度1.概述1.1什么是任务调度我们可以先思考一下业务场景的解决方案:某电商系统需要在每天上午10点,下午3点,晚上8点发放一批优惠券。某银行......
  • MongoDB简介与应用场景、Docker安装Mongo、整合SpringBoot实现CRUD
    (目录)1MongoDB相关概念1.1业务应用场景传统的关系型数据库(如MySQL),在数据操作的“三高”需求以及应对Web2.0的网站需求面前,显得力不从心。解释:“三高”需求:•Hi......
  • Spring Tool Suite 3(sts)手动添加namespace
    设置位置:window-->preferences-->spring-->namespaces 选中对应的namespace内容加入到xml文件中; ......