前言
你們看了前面七節,而後個人解讀。是否比較暈。沒意義了。每節都是截取的精華給你們了。一些沒用,不重要,過期的內容。就沒有寫了。spring
總結
一,補足的地方
1. 對實現體系的不爽
- AliasRegistry及實現類SimpleAliasRegistry,基本沒有什麼做用。一個無用的設計,形成了對體系理解十分困難,代碼閱讀十分困難。
- AutowireCapableBeanFactory接口的中一些方法是手動解決依賴與生命週期,並不向beanFactory註冊bean。鳥菜啊工做這麼多年,並無使用過這些方法。在微服務架構中更加不容許出現這種破壞行的操做。
- AbstractBeanFactory實現類裏面好多輔助類基本無用,並且這些輔助類的體系又很大,很複雜。目前都不敢看了。
2,bean註冊的4種方式
- 經過SimpleAliasRegistry的addSingleton()直接註冊一個object對象。
- 經過FactoryBeanRegistrySupport維護的 FactoryBean 對象得到bean
- 經過向DefaultListableBeanFactory的registerBeanDefinition(String beanName, BeanDefinition beanDefinition)方法註冊BeanDefinition對象
- 經過想DefaultSingletonBeanRegistry的protected void addSingletonFactory(String beanName, ObjectFactory<?> singletonFactory) 方法註冊ObjectFactory對象。
四種註冊方法,有四種實現。形成裏面的實現十分複雜,十分難以理解。也比較混亂。鳥菜啊感受有點噁心。只須要一種就好了。太複雜了 。架構
3, BeanDefinition體系的複雜
AbstractBeanFactory對RootBeanDefinition相關變量進行管理,也對bean的依賴進行管理。而DefaultListableBeanFactory對BeanDefinition其餘實現進行管理與維護。得到對象的時候是把其餘BeanDefinition轉成RootBeanDefinition對象進行實例化,生命週期,依賴管理等。裏面有大量的轉換設計與代碼微服務
4, beanFactory歷史問題
beanFactory是在2001年實現的,到2018年已經17年了,沒有重寫。不停的在原有的基礎上擴張。形成的代碼的臃腫,難用,不可用。沒有跟上微服務的特性。插件
二,簡要說明重點
1. bean註冊的四種方法中
- ObjectFactory對象的方式基本沒有使用。由於歷史緣由,在spring內部代碼還有幾處。因此保留。
- 直接注入對象目前來講,已經不多使用了。
- 掃描都是使用的BeanDefinition對象
- 第三方插件使用FactoryBean+ BeanDefinition對象
2. bean的聲明週期
- bean的生命週期基本是在AbstractAutowireCapableBeanFactory類中實現的
- bean的銷燬是在DefaultSingletonBeanRegistry類中處理的
- bean的依賴關係是在DefaultSingletonBeanRegistry中記錄的
最終
一個簡單的beanFactory,被spring寫得很複雜。歷史緣由,也用區域緣由。設計