第三章 spring-bean之beanFactory總結

前言

你們看了前面七節,而後個人解讀。是否比較暈。沒意義了。每節都是截取的精華給你們了。一些沒用,不重要,過期的內容。就沒有寫了。spring

總結

一,補足的地方

1. 對實現體系的不爽
  1. AliasRegistry及實現類SimpleAliasRegistry,基本沒有什麼做用。一個無用的設計,形成了對體系理解十分困難,代碼閱讀十分困難。
  2. AutowireCapableBeanFactory接口的中一些方法是手動解決依賴與生命週期,並不向beanFactory註冊bean。鳥菜啊工做這麼多年,並無使用過這些方法。在微服務架構中更加不容許出現這種破壞行的操做。
  3. AbstractBeanFactory實現類裏面好多輔助類基本無用,並且這些輔助類的體系又很大,很複雜。目前都不敢看了。
2,bean註冊的4種方式
  1. 經過SimpleAliasRegistry的addSingleton()直接註冊一個object對象。
  2. 經過FactoryBeanRegistrySupport維護的 FactoryBean 對象得到bean
  3. 經過向DefaultListableBeanFactory的registerBeanDefinition(String beanName, BeanDefinition beanDefinition)方法註冊BeanDefinition對象
  4. 經過想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註冊的四種方法中
  1. ObjectFactory對象的方式基本沒有使用。由於歷史緣由,在spring內部代碼還有幾處。因此保留。
  2. 直接注入對象目前來講,已經不多使用了。
  3. 掃描都是使用的BeanDefinition對象
  4. 第三方插件使用FactoryBean+ BeanDefinition對象
2. bean的聲明週期
  1. bean的生命週期基本是在AbstractAutowireCapableBeanFactory類中實現的
  2. bean的銷燬是在DefaultSingletonBeanRegistry類中處理的
  3. bean的依賴關係是在DefaultSingletonBeanRegistry中記錄的

最終

一個簡單的beanFactory,被spring寫得很複雜。歷史緣由,也用區域緣由。設計

相關文章
相關標籤/搜索