spring xml文件bean解析

调用生成beanFactory

Spring bean解析就在此方法
告诉子类刷新内部bean工厂
关闭上一个beanFactory,并创建新beanFactory
Start
ClassPathXmlApplicationContext构造函数调用
AbstractApplicationContext#refresh
AbstractApplicationContext#obtainFreshBeanFactory
AbstractRefreshableApplicationContext#refreshBeanFactory
End

BeanFactory定制

AbstractApplicationContext#obtainFreshBeanFactory方法中调用了AbstractRefreshableApplicationContext#customizeBeanFactory自定义此上下文使用的内部bean工厂。每次调用AbstractApplicationContext#refresh()尝试调用。默认实现应用此上下文的“允许Bean定义覆盖”和“允许循环引用”设置(如果指定)。可以在子类中重写,以自定义默认ListableBeanFactory的任何设置。

通过Xml bean Definition Reader加载bean定义。

AbstractApplicationContext#obtainFreshBeanFactory方法中调用了AbstractXmlApplicationContext#loadBeanDefinitions()这个便是核心的bean加载了

	@Override
   protected void loadBeanDefinitions(DefaultListableBeanFactory beanFactory) throws BeansException, IOException {
   	// Create a new XmlBeanDefinitionReader for the given BeanFactory.
   	XmlBeanDefinitionReader beanDefinitionReader = new XmlBeanDefinitionReader(beanFactory);

   	// Configure the bean definition reader with this context's
   	// resource loading environment.
   	beanDefinitionReader.setEnvironment(this.getEnvironment());
   	beanDefinitionReader.setResourceLoader(this);
   	beanDefinitionReader.setEntityResolver(new ResourceEntityResolver(this));

   	// Allow a subclass to provide custom initialization of the reader,
   	// then proceed with actually loading the bean definitions.
   	initBeanDefinitionReader(beanDefinitionReader);
   	loadBeanDefinitions(beanDefinitionReader);
   }
  • beanDefinitionReader.setEnvironment() 设置读取bean定义时要使用的环境
  • beanDefinitionReader.setResourceLoader() 设置用于资源位置的资源加载器。
  • beanDefinitionReader.setEntityResolver() 设置用于解析的SAX实体解析器。默认情况下,将使用资源实体解析器。可以为自定义实体解析重写,例如相对于某些特定的基路径。
  • initBeanDefinitionReader() AbstractXmlApplicationContext#initBeanDefinitionReader() 初始化用于加载此上下文的bean定义的bean定义读取器。默认实现为空。可以在子类中重写,例如用于关闭XML验证或使用不同的XML Bean Definition Parser实现。
  • loadBeanDefinitions() AbstractXmlApplicationContext#loadBeanDefinition使用给定的Xml bean Definition Reader加载bean定义。bean工厂的生命周期由刷新bean工厂方法处理;因此,该方法只需要加载和/或注册bean定义。

loadBeanDefinitions()内部根据xml是DTD或XSD定义校验xml文档格式是否正确

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值