前言

OOP表示面向对象编程,是一种编程思想;AOP表示面向切面编程,也是一种编程思想,AOP的概念可以参考文章:SpringAOP基本概念详解。

正文

1、AbstractAdvisorAutoProxyCreator类

AbstractAdvisorAutoProxyCreator类非常重要,只要Spring容器中存在这个类型的Bean,就相当于开启了AOP。

AbstractAdvisorAutoProxyCreator类实际上就是一个后置处理器,实现了BeanPostProcessor接口。所以在某个Bean初始化之后,会调用wrapIfNecessary()方法进行AOP,底层逻辑是:AbstractAdvisorAutoProxyCreator会找到所有的Advisor,然后判断当前这个Bean是否存在某个Advisor与之匹配(根据Pointcut),如果匹配就表示当前这个Bean有对应的切面逻辑,需要进行AOP,于是产生一个代理对象。

2、@EnableAspectJAutoProxy

这个注解主要就是往Spring容器中添加一个AnnotationAwareAspectJAutoProxyCreator类型的Bean。它继承了AspectJAwareAdvisorAutoProxyCreator。

而AspectJAwareAdvisorAutoProxyCreator继承了AbstractAdvisorAutoProxyCreator,并重写了findCandidateAdvisors()方法。AbstractAdvisorAutoProxyCreator只能找到所有Advisor类型的Bean对象,但是AspectJAwareAdvisorAutoProxyCreator可以进一步把@Aspect注解所标注的Bean中的@Before等注解及方法进行解析,并声称对应的Advisor对象。

所以,我们可以理解@EnableAspectJAutoProxy注解其实就是往Spring容器中添加一个AbstractAdvisorAutoProxyCreator类型的Bean,从而开启AOP,并且还会解析@Before等注解生成Advisor。

总结

Spring AOP的实现是利用了Bean生命周期过程中的后置处理器,在Bean初始化后完成。

Spring源码深度解析(五):Spring AOP原理及源码详解相关推荐

  1. Spring源码深度解析,Spring源码以及Bean的生命周期(五)(附代码示例:)

    五)Bean 的生命周期,创建---初始化---销毁的过程 目录 五)Bean 的生命周期,创建---初始化---销毁的过程 一 ,  指定初始化方法 init-method 方法​ 二 ,指定销毁 ...

  2. 源码深度解析之 Spring IOC

    这篇文章主要讲解 IOC 容器的创建过程,让你对整体有一个全局的认识,文章没有复杂嵌套的 debug 流程,相对来说比较简单. 不 BB,上文章目录. 1. 基础知识 1.1 什么是 Spring I ...

  3. 10天,几万字,源码深度解析之 Spring IOC

    历时 10 天,终于把 Sping 源码系列写完了,该系列一共 5 篇,后续会整理成 PDF 教程,本文是最后一篇. 这篇文章主要讲解 IOC 容器的创建过程,让你对整体有一个全局的认识,文章没有复杂 ...

  4. Spring源码深度解析(郝佳)-学习-ASM 类字节码解析

    我们在Java字节码文件结构剖析(二)中己经对MyTest35_1这个类的字节码做了完整的解析,今天,我们来看看Spring的ASM技术是如何来解析Java类字节码的.话不多说,先上实例. MyTes ...

  5. spring5源码阅读(五)Post Processors类型及作用详解

    文章目录 1. ConfigurationClassPostProcessor 1.1 BeanFactoryPostProcessor 1.2 BeanDefinitionRegistryPostP ...

  6. Spring源码深度解析(郝佳)-学习-源码解析-基于注解bean定义(一)

    我们在之前的博客 Spring源码深度解析(郝佳)-学习-ASM 类字节码解析 简单的对字节码结构进行了分析,今天我们站在前面的基础上对Spring中类注解的读取,并创建BeanDefinition做 ...

  7. 《Spring源码深度解析 郝佳 第2版》AOP

    往期博客 <Spring源码深度解析 郝佳 第2版>容器的基本实现与XML文件的加载 <Spring源码深度解析 郝佳 第2版>XML标签的解析 <Spring源码深度解 ...

  8. Spring源码深度解析(郝佳)-学习-源码解析-创建AOP静态代理实现(八)

    继上一篇博客,我们继续来分析下面示例的 Spring 静态代理源码实现. 静态 AOP使用示例 加载时织入(Load -Time WEaving,LTW) 指的是在虚拟机载入字节码时动态织入 Aspe ...

  9. Spring源码深度解析(郝佳)-学习-源码解析-创建AOP静态代理(七)

    加载时织入(Load-Time Weaving ,LTW) 指的是在虚拟机加载入字节码文件时动态织入Aspect切面,Spring框架的值添加为 AspectJ LTW在动态织入过程中提供了更细粒度的 ...

  10. spring源码深度解析---创建AOP代理之获取增强器

    spring源码深度解析-创建AOP代理之获取增强器 在上一篇的博文中我们讲解了通过自定义配置完成了对AnnotationAwareAspectJAutoProxyCreator类型的自动注册,那么这 ...

最新文章

  1. 深入Java虚拟机之虚拟机体系结构
  2. Adobe Creative Suite CS4/CS5 全系列注册机
  3. 一个用BitMap类完成的网页随机码图片生成类
  4. 【已解决】百度云分享失败
  5. 常见的保险种类,险种分类介绍
  6. 东北农业大计算机排名,黑龙江高校排名更新,东北林大排名第3,东油排名第8...
  7. 前端学习(3205):对state的理解
  8. 函数指针 如:void (*oper)(ChainBinTreee *p)
  9. oracle rman 检查坏块,Oracle中使用RMAN来检验坏块
  10. hashtable遍历
  11. 文章点赞以及取消点赞功能
  12. 使用git向远程库发布项目和下载项目步骤,结合gitee部署远程库,HTTPS\SHH上传下载情况详解
  13. Kubernetes 中pod绑定node节点:固定节点nodeName和nodeSelector调度详解
  14. 蓝桥杯真题 Python A组 路径
  15. 超市仓库管理系统(过期提醒)
  16. js植物大战僵尸实训1
  17. 无法在计算机上读取移动硬盘,解决苹果电脑不能读写移动硬盘
  18. windows 10 删除壁纸历史记录
  19. 计算机vb里代码里的双引号,在VB中使用字符串中的左双引号
  20. 基于Javaweb的问卷调查系统

热门文章

  1. 高中数学基础-1.1.1:集合的含义及其表示
  2. 高级语言程序设计c试卷,C语言高级语言程序设计1-期末试卷1.docx
  3. PHP实现随机发牌功能
  4. OpenStack面试宝典
  5. hp服务器bios如何改高性能,HPE ProLiant DL380 Gen10 不同BIOS设置内存性能测试
  6. WEB漏洞-逻辑越权
  7. C++ std iostream
  8. BMI指数(Body Mass Index)
  9. 微信小程序的动态表单,实现房屋租赁的多租客录入
  10. 智能合约语言 Solidity 教程系列9 - 错误处理 1