Spring-AbstractRefreshableApplicationContext
程序员文章站
2022-03-25 13:02:10
该类属于ApplicationContext子类,所以是一个BeanFactory,下面介绍本类中最重要的三个字段属性// @Nullable注解表示该字段允许为空// 是否允许覆盖相同名称的对象// 比如有一个类A,注册到容器中的名字叫m// 有有一个类B,注册到容器中的名字也叫m// 如果该字段=true,则B将会覆盖掉A@Nullableprivate Boolean allowBeanDefinitionOverriding;// 如果该字段=true,则允许Bean之间循环依赖@...
该类属于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需要判断一下是否不为空
@Override
public void setAllowBeanDefinitionOverriding(boolean allowBeanDefinitionOverriding) {
super.setAllowBeanDefinitionOverriding(false);
}
//正是因为我重写了该方法,所以spring需要判断一下是否不为空
@Override
public void setAllowCircularReferences(boolean allowCircularReferences) {
super.setAllowCircularReferences(false);
}
public static void main(String[] args) {
ClassPathXmlApplicationContext ctx = new MysTest();
ctx.refresh();
}
}
本文地址:https://blog.csdn.net/u011624903/article/details/112220314
上一篇: WEB-INF下web.xml配置文件