日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

spring源码:九大后置处理器

發布時間:2024/3/13 编程问答 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 spring源码:九大后置处理器 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目的:

spring在完成一個bean的初始化、實例化的過程中,會用到九個后置處理器;本文梳理出這九個后置處理器

九大后置處理器

spring在初始化的過程中,會在九個地方分別調用了五個后置處理的九個方法

第一次調用后置處理器org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#resolveBeforeInstantiation

InstantiationAwareBeanPostProcessor --> postProcessBeforeInstantiation方法
InstantiationAwareBeanPostProcessor的postProcessBeforeInstantiation方法可以返回任何類型,如果返回的對象不為null,就調用beanPostProcessor的postProcessAfterInitialization方法;如果返回null,就正常的執行流程;該后置處理器
在spring AOP當中,spring如果判斷當前類100%不需要進行增強,會把這個bean放到一個map中,并將value置為false,那么在后面進行增強的時候,會排除這個map中的bean

第二次調用后置處理器,該后置處理器推斷使用哪個構造函數來初始化bean對象

org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#determineConstructorsFromBeanPostProcessors
InstantiationAwareBeanPostProcessor --> determineCandidateConstructors();推斷使用哪個構造函數來初始化bean對象

在推斷使用哪一個構造函數的時候,會首先判斷當前構造函數是否有@Value和@Autowired注解,如果沒有,那就校驗當前構造方法對應的bean和傳來的beanClass是否一樣,如果是同一個,就把當前構造函數賦值給defaultConstructor在第二次調用后置處理器的時候,會返回當前可用的構造函數,由此來決定,使用哪個構造函數來創建bean

都三次調用后置處理器

org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#applyMergedBeanDefinitionPostProcessors

調用的是MergedBeanDefinitionPostProcessor --> postProcessMergedBeanDefinition 第三個后置處理器,是后面生命周期流程中的某些流程緩存一些meta信息

比如:在CommonAnnotationBeanPostProcessor和AutowiredAnnotationBeanPostProcessor的postProcessorMergedBeanDefinition的方法中,會調用finAutowiringMetadata和findResourceMetadata方法,將當前bean所依賴的bean(@Autowired和@Resource注解)存到一個map中,后面在進行屬性注入的時候,會先從這個map中找當前bean依賴的bean有哪些,如果map中為空,就再查找要注入的屬性有哪些
再比如:在CommonAnnotationBeanPostProcessor的這個方法中,將@PostConstrct和@PreDestroy注解對應的方法,緩存起來,在后面調用初始化的后置處理器的時候,先從這里存的map中找方法,找到,就直接執行即可
這些提前緩存的操作,都是在這個后置處理器完成的

第四次調用后置處理器 循環依賴

org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#getEarlyBeanReference
SmartInstantiationAwareBeanPostProcessor --> getEarlyBeanReference 第四個后置處理器(把創建的對象 放到earlySingletonObjects,解決循環依賴的),處理循環依賴問題會用到這個后置處理器
這里通過后置處理器,暴露出一個ObjectFactory(個人理解是一個bean工廠),可以完成bean的實例化等操作;這里的方法不會立即執行,只有執行到objectFactory.getObject()方法的時候,才會執行

第五次調用后置處理器 判斷是否需要進行屬性填充

org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#populateBean–InstantiationAwareBeanPostProcessor–postProcessAfterInstantiation
調用的是InstantiationAwareBeanPostProcessor --> postProcessAfterInstantiation 第五個后置處理器(判斷是否需要填充屬性)
如果我們需要在程序中自己注入屬性,可以利用這個點,在這里返回false,那么spring就不會調用下面這個后置處理器來注入屬性

第六次調用后置處理器 進行屬性注入

org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#populateBean–InstantiationAwareBeanPostProcessor–postProcessPropertyValues
調用的是InstantiationAwareBeanPostProcessor --> postProcessPropertyValues 第六個(處理類的屬性值)
主要是CommonAnnotationBeanPostProcessor(用來處理@Resource注解)和AutowiredAnnotationConigApplication(處理@Autowired和@Value注解);如果是自動注入(AutowireMode不為null),是無需通過后置處理器來進行屬性注入的

第七次調用后置處理器 執行初始化方法

org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#applyBeanPostProcessorsBeforeInitialization
調用的是BeanPostProcessor --> postProcessBeforeInitialization bean初始化方法
CommonAnnotationBeanPostProcessor 繼承了 InitDestroyAnnotationBeanPostProcessor,在該后置處理器處理的是@postconstruct注解

第八次調用后置處理器 springAop

org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#applyBeanPostProcessorsAfterInitialization
調用的是BeanPostProcessor --> postProcessAfterInitialization bean初始化之后執行的方法,典型應用:對aop進行處理,對目標類生成代理對象

第九次是在銷毀bean容器的時候調用的

在調用ac.close()方法的時候,會調用該后置處理器 org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor#postProcessBeforeDestruction
處理 @PreDestroy注解,destroy-method和destroy()方法

總結

以上是生活随笔為你收集整理的spring源码:九大后置处理器的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 99精品在线视频观看 | 丰满女邻居的色诱4hd | 欧美国产高潮xxxx1819 | 午夜视频一区二区 | 亚洲免费三级 | 欧美一级片免费看 | 久久网站免费看 | 激情超碰在线 | 欧美激情三区 | av首页在线 | 精品国产乱码久久久久 | 亚洲欧美日韩不卡 | 亚洲精品乱码久久久久久久久久久久 | www亚洲视频 | 久久国产精品网站 | 色综合久久久久综合体桃花网 | 网友自拍视频 | 精品免费一区二区 | 日本精品在线一区 | 精品亚洲国产成av人片传媒 | 欧美精品一区二区性色a+v | 黑丝一区 | 亚洲图片88 | 欧美88av| 我爱avav色aⅴ爱avav | 中日韩精品一区二区三区 | 国产视频1 | 乱视频在线观看 | 日韩欧美国产精品综合嫩v 国产小毛片 | 日韩免费| aaa一区二区 | 97超碰伊人| 国产美女精品视频国产 | 国产盗摄一区二区三区在线 | 毛片久久久久久 | 亚洲综合图 | av毛片在线免费看 | 亚洲成人激情小说 | 中国a级大片 | 亚洲人视频在线观看 | 91啪在线观看 | 可以在线观看的黄色 | 色狠狠一区二区三区 | 奴性白洁会所调教 | 国产一区二区91 | 国产在线xxxx| 亚洲无色 | 性欧美极品另类 | 日韩一区二区在线视频 | 中国国语农村大片 | 99视频在线观看免费 | 精品在线免费播放 | 国产午夜福利片 | 国产精品不卡在线观看 | 亚洲一区二区动漫 | 日本一区二区高清免费 | 中文字幕淫 | 日本午夜啪啪 | 激情六月综合 | 日韩乱码人妻无码中文字幕久久 | 极品探花在线 | 欧美顶级少妇做爰 | 成年人看的黄色片 | 国产中文字幕在线 | 欧洲最强rapper网站直播 | 国产精品国产三级国产a | 91小视频在线 | 91av小视频| 欧美日韩一区二区视频在线观看 | 韩国一区二区三区视频 | 四虎国产精品成人免费入口 | 色狠狠一区二区三区香蕉 | 午夜影院在线观看视频 | 精品亚洲国产成av人片传媒 | 青青草激情视频 | 国产黄色片免费看 | 欧美午夜免费 | 在线免费观看成年人视频 | 日本黄色网页 | 亚洲在线一区 | 色婷视频| a√在线 | 一本—道久久a久久精品蜜桃 | 一级在线看| 免费a级黄色片 | 天天干天天日夜夜操 | 日韩亚洲一区二区 | 哈利波特3在线观看免费版英文版 | 亚洲影视在线 | 无码一区二区三区 | 一级中文片 | 色婷婷视频在线观看 | gv天堂gv无码男同在线观看 | 无码人妻精品中文字幕 | 三级av免费看 | 久久99中文字幕 | 91视频网址 | 欧美aaa在线观看 | 人妻无码中文字幕 |