Spring IoC獲取對象基本原理

1. 初始化ApplicationContext(初始化bean容器, bean容器實際上就是Application擁有的BeanFactory)
new ApplicationContext()的時候。
發生了下面的操做:
BeanDefinitionReader讀取resource裏面指定的bean的xml配置文件。 而且把全部的單例bean存放到
ApplicationContext的BeanFactory的singletonObjects(HashMap結構)字段裏去。
ApplicationContext的BeanFactory的singletonObjects字段就把xml文件中配置的全部的單例bean都存放好了。java


2. 用applicationContext獲取bean
 applicationContext.getBean(String beanName)
其實是app

Object bean = applicationContext.getBeanFactory.getBean(String beanName);


AbstractBeanFactory繼承了DefaultSingletonBeanRegistry裏面有一個ConcurrentHashMap類型的singletonObjects來存放全部的已經被註冊了的單例bean
(key是beanName,value是bean對象)this

/** Cache of singleton objects: bean name --> bean instance */
    private final Map<String, Object> singletonObjects = new ConcurrentHashMap<String, Object>(256);


    
BeanFactory.getBean(), 若是是單例的,會調用這個方法,從singletonObjects中獲取到對應的bean.code

protected Object getSingleton(String beanName, boolean allowEarlyReference) {
        Object singletonObject = this.singletonObjects.get(beanName);
}

singletonObject被返回。這就是獲取到的bean
 xml

相關文章
相關標籤/搜索