DefaultListableBeanFactory如何被实例化

我们知道在WebApplicationContext初始化的时候需要进行Refresh操作,即调用refresh方法。

wac.refresh();

在这个过程中会对BeanFactory进行刷新。

			// Tell the subclass to refresh the internal bean factory.告诉其子类刷新内部的bean factory
			ConfigurableListableBeanFactory beanFactory = obtainFreshBeanFactory();
	protected ConfigurableListableBeanFactory obtainFreshBeanFactory() {
		refreshBeanFactory();//刷新BeanFactory,会进行新建操作
		ConfigurableListableBeanFactory beanFactory = getBeanFactory();
		if (logger.isDebugEnabled()) {
			logger.debug("Bean factory for " + getDisplayName() + ": " + beanFactory);
		}
		return beanFactory;
	}
	@Override
	protected final void refreshBeanFactory() throws BeansException {
		if (hasBeanFactory()) {//如果存在beanFactory则销毁并关闭
			destroyBeans();
			closeBeanFactory();
		}
		try {
			DefaultListableBeanFactory beanFactory = createBeanFactory();//创建一个新的beanFactory
			beanFactory.setSerializationId(getId());
			customizeBeanFactory(beanFactory);
			loadBeanDefinitions(beanFactory);//通过beanFactory加载beanDefinition
			synchronized (this.beanFactoryMonitor) {
				this.beanFactory = beanFactory;//对beanFactory进行重新赋值。
			}
		}
		catch (IOException ex) {
		throw new ApplicationContextException("I/O error parsing bean definition source for " + getDisplayName(), ex);
		}
	}

	protected DefaultListableBeanFactory createBeanFactory() {//传入这个context的父context内部的beanFactory
		return new DefaultListableBeanFactory(getInternalParentBeanFactory());//由此可见这个context内部的beanFacotry
	}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值