前言
你们看了前面七节,而后个人解读。是否比较晕。没意义了。每节都是截取的精华给你们了。一些没用,不重要,过期的内容。就没有写了。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写得很复杂。历史缘由,也用区域缘由。设计