IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> @EnableAspectJAutoProxy 注解如何开启 spring aop -> 正文阅读

[Java知识库]@EnableAspectJAutoProxy 注解如何开启 spring aop

@EnableAspectJAutoProxy 注解
  • 通过 @Import 注解向 spring 容器中注入 AspectJAutoProxyRegistrar 一个注册器
    在这里插入图片描述
AspectJAutoProxyRegistrar 注册器
  • 通过 AopConfigUtils.registerAspectJAnnotationAutoProxyCreatorIfNecessary() 方法向容器中注册一个 AspectJ注解自动代理对象
    在这里插入图片描述
向容器中注入 AnnotationAwareAspectJAutoProxyCreator
  • 向容器注入该对象之后,就可以通过注解的方式来使用 spring aop
    在这里插入图片描述
向 spring 容器中注册自动代理创建器的逻辑
  • 向 spring 容器中注入对象 AUTO_PROXY_CREATOR_BEAN_NAME = “org.springframework.aop.config.internalAutoProxyCreator”
  • 可以看到该对象的优先级是最高的,注册的优先级高于其他 aop bean 对象的注册,就是在 spring 容器初始化 [ refresh() ] 的时候注册到 spring 容器中
    在这里插入图片描述
向 spring 容器注册代理创建器对象整体流程
  • refresh()
  • invokeBeanFactoryPostProcessors(beanFactory)
  • PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(beanFactory, getBeanFactoryPostProcessors())
  • invokeBeanDefinitionRegistryPostProcessors(currentRegistryProcessors, registry, beanFactory.getApplicationStartup())
  • postProcessor.postProcessBeanDefinitionRegistry(registry)
  • processConfigBeanDefinitions(registry)
  • this.reader.loadBeanDefinitions(configClasses)
  • loadBeanDefinitionsForConfigurationClass(configClass, trackedConditionEvaluator)
  • loadBeanDefinitionsFromRegistrars(configClass.getImportBeanDefinitionRegistrars())
  • registrars.forEach((registrar, metadata)
    registrar.registerBeanDefinitions(metadata, this.registry, this.importBeanNameGenerator))
  • registerBeanDefinitions(importingClassMetadata, registry)
  • AopConfigUtils.registerAspectJAnnotationAutoProxyCreatorIfNecessary(registry)
  • registerAspectJAnnotationAutoProxyCreatorIfNecessary(registry, null)
  • registerOrEscalateApcAsRequired(AnnotationAwareAspectJAutoProxyCreator.class, registry, source)
  • RootBeanDefinition beanDefinition = new RootBeanDefinition(cls)
可以通过 debug 的方式查看创建 org.springframework.aop.aspectj.annotation.AnnotationAwareAspectJAutoProxyCreator 的流程

在这里插入图片描述

总结
  • 通过 @EnableAspectJAutoProxy 注解引入类型为 AnnotationAwareAspectJAutoProxyCreator 的 bean,这个 bean 会根据 AspectJ 的注解收集 Advisor ,通过收集的 Advisor 创建代理,底层又会把 Advisor 中的 Advice 转换为 MethodInvocation 拦截目标方法的执行
  • 注册该对象之后就是开启 自动代理对象创建,spring aop 就是通过动态代理的方式实现,所以可以说是开启代理的功能
  • 这些对象都是在 spring 容器初始化的时候先一步创建出来,在初始化的时候提前创建好,在后续的对象创建的时候,会判断对象是否有使用 aop 的功能,从而在创建对象的时候通过 BeanPostProcessor 对对象进行代理增强
  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-08-19 18:50:24  更:2022-08-19 18:54:49 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 13:25:15-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码