第三章 spring-bean之beanFactory总结

原创
2018/08/04 22:41
阅读数 324

前言

大家看了前面七节,然后我的解读。是否比较晕。没意义了。每节都是截取的精华给大家了。一些没用,不重要,过时的内容。就没有写了。

总结

一,补足的地方

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写得很复杂。历史原因,也用区域原因。

展开阅读全文
加载中

作者的其它热门文章

打赏
0
2 收藏
分享
打赏
0 评论
2 收藏
0
分享
返回顶部
顶部