Spring架构详解之BeanFactory的创建-上

下面是更新BeanFactory的方法代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
protected final void refreshBeanFactory()  throws BeansException {   
  
     if (hasBeanFactory()) {   
  
         destroyBeans();   
  
         closeBeanFactory();   
  
    
  
     try
  
         DefaultListableBeanFactory beanFactory = createBeanFactory(); 
  
         beanFactory.setSerializationId(getId()); 
  
         customizeBeanFactory(beanFactory); 
  
         loadBeanDefinitions(beanFactory); 
  
         synchronized ( this .beanFactoryMonitor) { 
  
             this .beanFactory = beanFactory;   
  
        
  
    
  
     catch (IOException ex) {   
  
         throw new ApplicationContextException(   
  
                        "I/O error&  nbsp;parsing bean definition source for " 
  
                        + getDisplayName  (), ex); 
  
    
  
}

这个方法实现了AbstractApplicationContext的抽象方法refreshBeanFactory,这段代码清楚的说明了BeanFactory的创建过程。注意BeanFactory对象的类型的变化,前面介绍了他有很多子类,在什么情况下使用不同的子类这非常关键。BeanFactory的原始对象是DefaultListableBeanFactory,这个非常关键,因为他设计到后面对这个对象的多种操作,下面看一下这个类的继承层次类图:

DefaultListableBeanFactory类继承关系图
DefaultListableBeanFactory类继承关系图

从这个图中发现除了BeanFactory相关的类外,还发现了与Bean的register相关。这在refreshBeanFactory方法中有一行loadBeanDefinitions(beanFactory)将找到答案,这个方法将开始加载、解析 Bean的定义,也就是把用户定义的数据结构转化为Ioc容器中的特定数据结构。

这个过程可以用下面时序图解释:

创建BeanFactory时序图
创建BeanFactory时序图
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值