?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)查看更多个人心得和分享 , 和笔者一起互相讨论
- 阿里巴巴|日本也恶意刷低分!话题的《秋筱宫》采访书 亚马逊不得不限制评论
- 阿里巴巴|小腿坚强的人腰才会挺,马云和刘强东为什么都那么重视基层?
- 阿里巴巴|阿里张勇连线300家平台商家:为商家多做实事,阿里义不容辞
- 阿里巴巴|腾讯利润大幅下滑,已开启新一轮裁员,范围进一步扩大
- 阿里巴巴|阿里张勇连线300家平台商家:为商家多做实事 阿里义不容辞
- 阿里巴巴|马云“4个新身份”曝光,多重豁免权加身,和老美合作目的不简单
- 阿里巴巴|开启发展“新引擎”——“小巨人”插上数字化“翅膀”
- 阿里巴巴|残影空间出品方解析短视频平台对影视宣发的作用与帮助
- 阿里巴巴|阿里正式官宣,玄铁处理器成功运行,马云果然说到做到
- 阿里巴巴|马云厉害了,“天价”蚂蚁森林正式被确认变成这般模样,望周知!