Spring-AbstractRefreshableApplicationContext
该类属于ApplicationContext子类,所以是一个BeanFactory,下面介绍本类中最重要的三个字段属性
// @Nullable注解表示该字段允许为空
//
// 该字段表示是否允许覆盖相同名称的对象
// 比如有一个类A,注册到容器中的名字叫m
// 又有一个类B,注册到容器中的名字也叫m
// 如果该字段=true,则B将会覆盖掉A
@Nullable
private Boolean allowBeanDefinitionOverriding;
// 如果该字段=true,则允许Bean之间循环依赖
@Nullable
private Boolean allowCircularReferences;/** Bean factory for this context. */
@Nullable
private volatile DefaultListableBeanFactory beanFactory;
了解上述字段属性,我们看下面的customizeBeanFactory方法
protected void customizeBeanFactory(DefaultListableBeanFactory beanFactory) {// 此处判断是否为null,说明有其他地方很可能对其赋值if (this.allowBeanDefinitionOverriding != null) {beanFactory.setAllowBeanDefinitionOverriding(this.allowBeanDefinitionOverriding);}// 此处判断是否为null,说明有其他地方很可能对其赋值if (this.allowCircularReferences != null) {beanFactory.setAllowCircularReferences(this.allowCircularReferences);}
}
继续说上述为什么判断=null,主要目的是为了我们自己实现ApplicationContext的时候重写setAllowBeanDefinitionOverriding和setAllowCircularReferences时候用的,也就是说如果当前ApplicationContext是我们自己实现的ApplicationContext的话,spring要判断一下我们的ApplicationContext是否对这两个字段进行了设置,其实从方法名customize就可以看出来的,这么设计和AbstractApplicationContext.prepareRefresh方法是一样的原则,下面是示例代码,该代码体现了customizeBeanFactory方法的用途
public class MysTest extends ClassPathXmlApplicationContext {//正是因为我重写了该方法,所以spring需要判断一下是否不为空@Overridepublic void setAllowBeanDefinitionOverriding(boolean allowBeanDefinitionOverriding) {super.setAllowBeanDefinitionOverriding(false);}//正是因为我重写了该方法,所以spring需要判断一下是否不为空@Overridepublic void setAllowCircularReferences(boolean allowCircularReferences) {super.setAllowCircularReferences(false);}public static void main(String[] args) {ClassPathXmlApplicationContext ctx = new MysTest();ctx.refresh();}
}
Spring-AbstractRefreshableApplicationContext相关推荐
- 学习Spring中遇到关于BeanFactory及测试类的问题
最近在学习Spring,使用的是Spring 5.0.1 学习书本中使用的是4.0 学习书本中使用以下来加载配置文件及设置 Resource resource = new ClassPathResou ...
- 简述控制反转ioc_阅读Spring源码:IOC控制反转前的处理
温馨提示:要怀着 这个世界很美好 的心态去看~ 技术经验交流:点击入群 ClassPathXmlApplicationContext的注册方式 源码分析基于Spring4.3 从ClassPathXm ...
- [Spring 深度解析]第7章 IoC容器的初始化过程
7. IoC容器的初始化过程 简单来说,IoC容器的初始化是由前面介绍的refresh()方法来启动的,这个方法标志着IoC容器的正式启动.具体来说,这个启动包括BeanDefinition的Re ...
- spring bean xml 调用方法_Spring通过Xml方式注册Bean的几处关键实现点
1.前言 我们用SpringMVC的时候一般会用到Xml配置文件,那么我们这篇文章就来谈下Spring读取Xml配置文件的一些关键实现点. 2.AbstractRefreshableApplicati ...
- Spring 框架的设计理念与设计模式分析
Spring 的骨骼架构 Spring 总共有十几个组件,但是真正核心的组件只有几个,下面是 Spring 框架的总体架构图: 图 1 .Spring 框架的总体架构图 从上图中可以看出 Spring ...
- (转)spring源码解析,spring工作原理
转自:https://www.ibm.com/developerworks/cn/java/j-lo-spring-principle/ Spring 的骨骼架构 Spring 总共有十几个组件,但是 ...
- Spring component-scan类扫描加载过程
2019独角兽企业重金招聘Python工程师标准>>> https://github.com/javahongxi 有朋友最近问到了spring加载类的过程,尤其是基于annotat ...
- Spring:源码解读Spring IOC原理
2019独角兽企业重金招聘Python工程师标准>>> 一.什么是Ioc/DI? IOC容器:主要是完成了 完成对象的创建和依赖的管理注入等. 先从我们自己设计这样一个视角来考虑: ...
- 深入理解 Spring 之源码剖析IOC
推荐两篇文章: https://www.jianshu.com/p/e4ca039a2272 https://www.cnblogs.com/ITtangtang/p/3978349.html 一.介 ...
- spring:如何用代码动态向容器中添加或移除Bean ?
先来看一张类图: 有一个业务接口IFoo,提供了二个实现类:FooA及FooB,默认情况下,FooA使用@Component由Spring自动装配,如果出于某种原因,在运行时需要将IFoo的实现,则F ...
最新文章
- 管理单元初始化失败解决办法
- AOSP Ubuntu命令
- javascript闭包产生的内存泄漏
- boost::endian::endian_arithmetic的测试程序
- python xpath定位打印元素_python基础教程:8种selenium元素定位的实现
- i7 5500u linux,i7 5500u相当于什么cpu
- 方维分享系统,品牌无法设置分类关联
- linux 把秒数转换为正常时间格式命令
- 微信小程序4-小程序的api
- UEFI学习——事件函数WaitForEvent和CreateEvent/CreateEventEx
- CVPR 2021 Involution: Inverting the Inherence of Convolution for Visual Recognition
- tp6 集成swoole
- 哪个手机浏览器可以倍速_手机四款浏览器APP的比较
- GNSS精密轨道产品sp3与精密钟差产品clk批量下载(Linux Shell)
- 效果惊人:上古卷轴III等经典游戏也能使用超分辨率GAN重制了
- git 配置winmerge
- latex公式文字划掉的效果
- 豌豆荚Hack Day:百宝袋负责人访谈
- sparkGraphX 图操作:pregel(加强的aggregateMessages)
- POJ1655 Balancing Act 题解
热门文章
- SpringBoot整合Encahce后,访问页面页面出现异常信息,无法获取返回数据
- python将excel导入生成矩阵_Python导入数值型Excel数据并生成矩阵操作
- python窗口动态实时显示时间_量化交易实时动态监视系统(纯Python,只需要浏览器就能用)-直接GitHub开源可下载...
- nginx ---- Nginx服务器基础配置实例
- JavaSE----异常处理
- python语言中有3种表示字符串的方式、单引号和_Python中三种类型的引号(单引号、双引号、三引号)...
- 想要预览文件或是图片,将后端返回的信息转换为前端可以正常显示的格式
- Linux下安装Apache Maven安装
- C#如何关闭指定进程
- 使用DataX从ORACLE同步数据到MYSQL