?setAllowCircularReferences 是否允许Bean之间的循环引用 , 为true时(默认)会自动解决循环依赖
?setAllowRawInjectionDespiteWrapping 是否允许原始Bean(没有切面和装饰)的注入 , 默认FALSE , 不那么常用 , 也不鼓励使用
?setAllowEagerClassLoading 是否允许Bean的Class提前加载 , 及时被标识为lazy-init , 默认true
加载BeanDefinition
自此 , 我们就已经得到了一个BeanFactory对象 , 这之后 , 我们将使用BeanFactory实例完成一系列的后续工作 。 在refreshBeanFactory中 , 则有非常重要的一步——loadBeanDefinitions(beanFactory) , 这里面的源码真的是很庞大 , 我们还是挑重点进行讲解 。
继续看loadBeanDefinitions(beanDefinitionReader)的核心逻辑
下面就进入了XmlBeanDefinitionReader的加载逻辑中
加载多个资源 , 便有加载单个资源接口 , 直接看
转化成String location转化成 Resource之后继续下钻 -loadBeanDefinitions(resources)并且会继续遍历后执行loadBeanDefinitions(new EncodedResource(resource));
EncodedResource加上了编码和字符集信息 , 继续下钻至doLoadBeanDefinitions(inputSource encodedResource.getResource())
这里加上2个标题 , 之前都跳过也没有关系 , 核心的就是这里的逻辑:将配置信息Resource读取成Document对象中 , 并根据该Document对象将资源注册到Bean工厂中
?doLoadDocument(inputSource resource)
?registerBeanDefinitions(doc resource)
继续看 , 又是将处理逻辑委托给BeanDefinitionDocumentReader实例的方法 registerBeanDefinitions , 搞不清这是装饰器模式 , 还是适配器模式 , 还是代理模式 。。。先看DefaultBeanDefinitionDocumentReader的实现吧
protectedvoidparseBeanDefinitions(Elementroot BeanDefinitionParserDelegate delegate) {//
if(delegate.isDefaultNamespace(root)) {
NodeListnl = root.getChildNodes();
for(inti =0; i < nl.getLength(); i++) {
进去看下
我们在上面铁锅BeanFactory的类图 , 实现了BeanDefinitionRegistry和AliasRegistry , 所以传进来的就是BeanFactory对象了这样兜一大圈子有啥好处呢?这样理解起来也贼复杂了
这就是面向接口编程了 , 每一层只负责自己职责内的逻辑 , 其他的逻辑我只调用接口引用的方法就可以了 , 你给我什么实现 , 就会调用谁的实现 。 扩展性就好了嘛
因为我们知道不同的环境下 , 很多的变话 , 比如:
2.配置文件的读取逻辑不同 , 所以要用不同的Reader
3.BeanFactory的具体实现类也可能有所不同
回到BeanFactory再看 , BeanDefinition是怎么被加载的 , 进入
这里的逻辑就蛮简单的 , BeanDefinition列表都已经拿到了 , 就注册上去好了(忽略的和没有提到的代码无非就是检查重复、判断是否已经有同名的单例Bean存在了 , 都销毁、刷新或重置下)
至此 , 就完成了BeanFactory的实例化 , 基础设置工作和BeanDefinition加载工作 , 因为笔者使用的是XML的配置文件 , 在最终的BeanDefinition加载前经过XmlBeanDefinitionReader中的BeanDefinitionDocumentReader处理 , 并交由BeanDefinitionParserDelegate完成配置资源加载成Document并解析成BeanDefinition , 并由BeanDefinitionReaderUtils调用BeanDefinitionRegistry实例(也就是BeanFactory实例)完成BeanDefinition的注册 。
https://blog.csdn.net/mytream/article/details/124892899
也可以前往(请给我一根烟的时间https://blog.csdn.net/mytream)查看更多个人心得和分享 , 和笔者一起互相讨论
- 阿里巴巴|电商转折点出现?神秘消失23天的李佳琦,意外暴露了阿里的问题
- 阿里巴巴|李佳琦消失扯下阿里“遮羞布”,原来淘宝根本就没有护城河
- 阿里巴巴|低调了三年的阿里如今又重新走上了神坛,马云藏了十年的底牌再也藏不住了
- 阿里巴巴|蚂蚁和阿里,准备彻底分家
- spring|纯白ITX来了,还支持GEAR 1高频内存!新款七彩虹B660迷你主板测试
- 阿里巴巴|马云现身西班牙开12亿豪华游艇
- 阿里巴巴|线上酒店,把线下渠道搬到线上,同样可以得到商机
- 阿里巴巴|享受退休生活的阿里巴巴创始人马云现身西班牙马略卡岛
- 任正非|京东618增长率历年最慢,阿里巴巴表示:难兄难弟
- 阿里巴巴|发生了什么?李佳琪神秘“消失”,阿里“遮羞布”被撕开
