文章图片
文章图片
文章图片
文章图片
文章图片
文章图片
文章图片
文章图片
什么是AOP?
AOP是一种编程范式 , 旨在通过允许分离横切关注点来增加模块化 。 他通过在不修改代码本身的情况下向现有代码添加额外的行为来实现这一点 。
相反 , 我们可以分别声明新方法和新行为 。 Spring的AOP框架帮助我们实现这些横切关注点 。
注意:本文是以5.2.3版本为讲解 。
步骤一:AutowireCapableBeanFactory类对容器生成的Bean添加后置处理器在前两篇关于“DI”的文章中 , 我们讲到Spring对Bean属性通过“populateBean()”方法是如何进行依赖注入的 , 今天我们讲解通过“initializeBean()”方法是如何为Bean实例应用BeanPostProcessor后置处理器 。
步骤二:为Bean实例对象添加BeanPostProcessor后置处理器的入口
初始化给定的bean实例 , 应用工厂回调以及init方法和beanPostProcessor后置处理器 。 从createBean调用定义的bean , 从initializeBean调用现有bean实例 。 大致业务如下:
- invokeAwareMethods:为Bean实例包装相关属性 , 如:bean名称、Bean类加载器、bean工厂等 。
- applyBeanPostProcessorsBeforeInitialization:将 BeanPostProcessors 应用于给定的现有 bean 实例 , 调用它们的 postProcessBeforeInitialization 方法 。 返回的 bean 实例可能是当前bean的包装后的bean 。
- invokeInitMethods:执行初始化的方法 , 如果当前bean实现了InitializingBean接口就调用afterPropertiesSet()方法 , 如果是init-method属性 , 就调用指定的方法
- applyBeanPostProcessorsAfterInitialization:将 BeanPostProcessors 应用于给定的现有 bean 实例 , 调用它们的 postProcessAfterInitialization 方法 。 返回的 bean 实例可能是当前bean的包装后的bean 。
循环遍历获取所有的BeanPostProcessor后置处理器 , 调用所有的初始化前的处理方法
步骤四:调用BeanPostProcessor后置处理器实例对象初始化之后的处理方法
循环遍历获取所有的BeanPostProcessor后置处理器 , 调用所有的初始化后的处理方法
BeanPostProcessor有很多实现的子类 , 分别有不同的功能 , 而其中创建AOP代理对象的子类“AbstractAutoProxyCreator” , 在这里我们继续分析该类的postProcessAfterInitialization方法 。
步骤五:选择代理策略大致业务如下:
- 判断当前是否需要代理(即Advice类、Pointcut类、Advisor类、AopInfrastructureBean类) , 如果不需要 , 返回当前bean实例
- getAdvicesAndAdvisorsForBean:获取这个bean的advice集合
- createProxy:创建代理
- 华为|墨水屏如此小众,华为为什么还要做?
- 自媒体|详细实操分享,每天1小时复制粘贴,一个月收益6000,适合没口才的新手做
- 摩托罗拉|从3599元跌至2799元,12GB+256GB+68W,从高端市场跌至中端市场
- 摩托罗拉|真的不赚钱?骁龙888plus+512GB存储,仅售2469元
- 摩托罗拉|2399元起,512GB +骁龙8+144Hz,摩托罗拉站起来了
- 摩托罗拉|摩托罗拉edge X40Pro曝光:超级无界屏+20G运存,这才是真香机
- 摩托罗拉|一代霸主摩托罗拉杀回来了!19年前放弃收购华为、轻视中国市场…
- 自媒体|每天收益200+,方法教给你,在家做自媒体视频剪辑
- 摩托罗拉|作为一个合格的打工人,真心建议大家整一个智能手表关注一下自身状态......
- 摩托罗拉|moto G71s体验:高清大屏与防抖影像兼顾,软硬协同使用体验更出色