前言
先說一下本人狀況吧,末流985畢業,畢業以後一直在一家不大不小的公司裏安穩上班。上半年由於疫情的緣由公司調整了工資,我也是隨波逐流跟隨你們辭了職。辭職以後向阿里。字節這些都投了簡歷(可是隻收到了阿里的回覆)。一路竟然驚險但也是成功斬下offer,問的都是最近兩年新出的面試頻度較高的面試題!,如今我把我所學的分享給你們!程序員
做爲一名Java方向的程序員,在面試大廠的時候,其實關於spring這一塊是問的很是多的,尤爲是源碼這一塊,幾乎是逢面試必問,雖說如今技術更新比較快,可是掌握好spring以及它的源碼絕對是你面試的一個殺手鐗。如下這份文檔就包括了spring從基礎到源碼主要涉及到的內容有以下面試
- Spring框架功能總體介紹
- Spring IOC容器底層註解使用
- Spring Ioc容器源碼解析
- Spring 是如何解決循環依賴的
- Spring Aop源碼分析
- spring 事務源碼解析
首先跟你們說一下就是我碰到的面試題,關於spring循環依賴的spring
什麼是循環依賴?
循環依賴其實就是循環引用,也就是兩個或者兩個以上的bean互相持有對方,最終造成閉環。好比A依賴於B,B依賴於C,C又依賴於A。以下圖:架構
注意,這裏不是函數的循環調用,是對象的相互依賴關係。循環調用其實就是一個死循環,除非有終結條件。框架
Spring中循環依賴場景有: 運維
(1)構造器的循環依賴 ide
(2)field屬性的循環依賴函數
其中,構造器的循環依賴問題沒法解決,只能拋出BeanCurrentlyInCreationException異常,在解決屬性循環依賴時,spring採用的是提早暴露對象的方法。源碼分析
Spring怎麼解決循環依賴
這裏附上一張解決Spring循環依賴的流程圖
學習
因爲圖片過大可能致使模糊,須要這套圖的能夠關注個人公衆號:前程有光直接獲取
面對大廠問Spring源碼而言,不少的Java面試者都紛紛敗北,源碼沒有一個正確的方法學起來確實挺吃力的,在這把以前學源碼的一些經驗和筆記分享給你們,但願對那些還在學習Spring源碼的朋友有所幫助!
1、 Spring框架功能總體介紹
- Sring Core Container
- Beans (BeanFacotry的做用)
- Context
- Expression Language )
- Spring Data Access/Integration
- Transaction
- Spring Web
- Spring Aop
- Instrumentation
- 控制反轉和依賴注入
- 什麼是控制反轉?
2、Spring IOC容器底層註解使用
- xml配置文件的形式 VS 配置類的形式
- 基於xml的形式定義Bean的信息
- 基於讀取配置類的形式定義Bean信息
- 在配置類上寫@CompentScan註解來進行包掃描
- 排除用法 excludeFilters
- 包含用法 includeFilters
- @ComponentScan.Filter type的類型
- FilterType.CUSTOM 自定義類型如何使用
3、Spring Ioc容器源碼解析
- Spring源碼解析之擴展原理
- ApplicationListener:Spring是如何發佈事件的? )
- BeanDefinitionRegistryPostProcessor的處理源碼流程
- BeanFactoryPostProcessor 處理流程
- Spring Bean的實例化過程
- bean實例化過程的調用鏈
- bean的實例化過程源碼分析
- SpringIOC容器啓動源碼的分析
4、Spring 是如何解決循環依賴的
- 什麼是循環依賴?
- 代碼實例:
- 可能存在的問題:
- 解決方案:
- 什麼是早期引用?
5、 Spring Aop源碼分析
- AOP
- 基本概念
- 簡單案例
- @EnableAspectJAutoProxy
- Import(AspectJAutoProxyRegistrar.class)
- 因此咱們來分析AspectJAutoProxyRegistrar類是用來幹什麼的?
6、spring 事務源碼解析
- 什麼是事物?
- 事物的特性(ACID)
- Spring事務三大接口介紹
- PlatformTransactionManager接口介紹
- TransactionDefinition 事務屬性的定義
7、Spring5.0新特性之日誌框架
- 日誌框架場景
- 咱們Java中經常使用的日誌框架是什麼?
- 咱們經常據說的就是以下的日子框架,還不知道怎麼選?
- 加入咱們系統使用的是SLF4J做爲日誌門面,咱們是如何匹配?
- Spring4.Xspring底層使用的日誌技術
- Spring5.x 底層使用的日誌技術
以上就是這份文檔的概況,一次搞懂spring以及核心源碼,不論是架構師仍是開發者,又或是運維,都可以從中學到很多。
因爲篇幅緣由,這份spring核心筆記已經被整理成了PDF文檔,有須要這份spring核心筆記完整文檔的能夠關注個人公衆號:前程有光免費獲取