Spring原始碼心得
Spring所有的管理都是基於IOC容器的,Ioc容器中管理的都是一些bean,那麼這些bean是如何來的呢?
- beanDefinitonReader:負責讀取有關bean的配置說明,如 xml配置bean需要掃描的包路徑,又或者是 @annotation 方式;
- beanDefinitionScan:負責在指定的包路徑下,掃描出滿足條件的bean類;
- beanDefinitionRegistry:負責將掃描出來的bean類,註冊到一個統一的地方,我們叫做一級快取,beanDefinitionMap;
- beanFactory:一個冷血的生產機器,根據入參的bean 名字,來生產出指定的bean(既負責生產,也負責獲取)
擴充點:在beanFactory 生產bean之前,還有兩個很關鍵的後置處理器
1、BeanFactoryPostProcessor:可以修改bean的具體對映,例如汽車car可能被修改成火車train
2、BeanDefinitionRegistryPostProcessor:可以新增定義的bean 定義。
BeanFactory 是通過getBean 來負責生產bean的,其中涉及到:
- 反射成具體的bean類(擴充:反射的兩種實現方式 @1:cglib @2:jdk 。spring中是通過jdk實現的)
- 填充屬性(被@autowired @value... 修飾的屬性被賦值)
- 初始化(initMethod,一般情況下aop是在這一層實現的)
在getBean 整個過程中,其實還有好多bean的後置處理器,就是我們經常說的ware。
舉例AnnotationConfigApplicationContext啟動都幹嘛了
- 初始化beanFactory(DefaultListableBeanFactory)
- 初始化beanDefinitionReader:這裡面註冊了處理器類,如:beanDefinition
- 初始化beanDefinitionScan
- refresh
BeanFactory 與 Application的區別?
1、beanFactory是父類,applicationContext繼承與beanfactory;
2、applicationContext功能強大,有國際化,擴充套件點,但是beanFactory 只能獲取bean,如果要新增一個bean,必須要註冊一個registry.
相關文章
- Spring原始碼分析——搭建spring原始碼Spring原始碼
- Spring原始碼剖析9:Spring事務原始碼剖析Spring原始碼
- Spring原始碼分析——spring原始碼之obtainFreshBeanFactory()介紹Spring原始碼AIBean
- 5.2 spring5原始碼--spring AOP原始碼分析三---切面原始碼分析Spring原始碼
- Spring原始碼系列:BeanDefinition原始碼解析Spring原始碼Bean
- 5.1 Spring5原始碼--Spring AOP原始碼分析一Spring原始碼
- Spring原始碼分析——spring原始碼核心方法refresh()介紹Spring原始碼
- 5.2 Spring5原始碼--Spring AOP原始碼分析二Spring原始碼
- Spring原始碼分析Spring原始碼
- 【Spring原始碼分析】AOP原始碼解析(上篇)Spring原始碼
- 【Spring原始碼分析】AOP原始碼解析(下篇)Spring原始碼
- spring boot碼雲原始碼Spring Boot原始碼
- Spring Security原始碼分析六:Spring Social社交登入原始碼解析Spring原始碼
- Spring原始碼深度解析(郝佳)-學習-原始碼解析-Spring MVCSpring原始碼MVC
- 【spring原始碼學習】spring的事務管理的原始碼解析Spring原始碼
- Spring原始碼之IOC(一)BeanDefinition原始碼解析Spring原始碼Bean
- spring學習:spring原始碼_BeanDefinitionSpring原始碼Bean
- 如何看Spring原始碼Spring原始碼
- Spring AOP 原始碼解析Spring原始碼
- 【spring原始碼】六、@EnableAspectJAutoProxySpring原始碼
- Spring之事務原始碼Spring原始碼
- Spring cache原始碼分析Spring原始碼
- Spring原始碼分析-BeanFactoryPostProcessorSpring原始碼Bean
- Spring原始碼編譯Spring原始碼編譯
- spring原始碼基礎Spring原始碼
- jQuery 原始碼分析和使用心得 - core.jsjQuery原始碼JS
- 【spring原始碼學習】spring的遠端呼叫實現原始碼分析Spring原始碼
- Spring原始碼系列(二)--bean元件的原始碼分析Spring原始碼Bean元件
- Spring原始碼剖析6:Spring AOP概述Spring原始碼
- Spring:原始碼解讀Spring IOC原理Spring原始碼
- Spring原始碼分析——spring容器總覽Spring原始碼
- 5.2 spring5原始碼--spring AOP原始碼分析二--切面的配置方式Spring原始碼
- spring原始碼分析——BeanPostProcessor介面Spring原始碼Bean
- Spring原始碼系列:BeanWrapperSpring原始碼BeanAPP
- 劍指Spring原始碼(一)Spring原始碼
- 劍指Spring原始碼(二)Spring原始碼
- spring原始碼解讀-aopSpring原始碼
- 【spring原始碼系列】之【BeanDefinition】Spring原始碼Bean