refreshBeanFactory

org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory()
首先,hasBeanFactory,判断context目前是否持有bean factory,如果有:先执行一个模版方法,销毁这个context管理的所有bean,默认实现销毁所有context中的单例缓存,调用DisposableBean.destroy()和/或特定的"destroy-method";再closeBeanFactory,即设置beanFactory的id为null,beanFactory为null。
然后,createBeanFactory,为context创建一个internal bean factory。每次refresh()都会被调用,默认实现创建一个以context的getInternalParentBeanFactory()-parent为parent bean factory的org.springframework.beans.factory.support.DefaultListableBeanFactory,子类可以重写此方法来自定义DefaultListableBeanFactory的设置。
然后,将context的id设置为beanFactory的SerializationId。
然后,customizeBeanFactory,自定义beanFactory。自定义context的nternal bean factory,每次refresh()都会被调用,默认实现设置了context的setAllowBeanDefinitionOverriding "allowBeanDefinitionOverriding"以及setAllowCircularReferences "allowCircularReferences",子类可以重写此方法来自定义DefaultListableBeanFactory的设置。
然后,loadBeanDefinitions,加载BeanDefinitions。通过XmlBeanDefinitionReader加载bean definitions。先用BeanFactory创建一个新的XmlBeanDefinitionReader;设置beanDefinitionReader的environment为contextd的resource loading environment;设置beanDefinitionReader的ResourceLoader为context;创建ResourceEntityResolver(this)并设置为beanDefinitionReader的EntityResolver;initBeanDefinitionReader,供子类覆写的方法,初始化beanDefinitionReader,默认为空实现;loadBeanDefinitions,用指定的XmlBeanDefinitionReader加载bean definitions,bean factory的生命周期由refreshBeanFactory方法处理,因此,这个方法只加载和/或注册bean definitions,委托ResourcePatternResolver解析location patterns到Resource实例,先获取configLocations,再调用XmlBeanDefinitionReader的loadBeanDefinitions方法完成beanDefinitions的加载。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值