一、   Spring啓動時加載和初始化bean概述

Spring Context繼承關係

ClassPathXmlApplicationContext->AbstractXmlApplicationContext->AbstractRefreshableConfigApplicationContext->AbstractRefreshableApplicationContext

->AbstractApplicationContext

而AbstractRefreshableApplicationContext 包含DefaultListableBeanFactory beanFactory

DefaultListableBeanFactory->AbstractAutowireCapableBeanFactory->AbstractBeanFactory->FactoryBeanRegistrySupport->DefaultSingletonBeanRegistry


AbstractBeanFactory有如下元素

final Map<String, RootBeanDefinition> mergedBeanDefinitions=new ConcurrentHashMap<String, RootBeanDefinition>(64);

final List<BeanPostProcessor> beanPostProcessors = new ArrayList<BeanPostProcessor>();

boolean hasInstantiationAwareBeanPostProcessors;



1)[ClassPathXmlApplicationContext] ClassPathXmlApplicationContext(String configLocation)

this(new String[] {configLocation}, true, null);


2)[ClassPathXmlApplicationContext] ClassPathXmlApplicationContext(String[] configLocations, boolean refresh, ApplicationContext parent)

if (refresh) { refresh(); }


3)[AbstractApplicationContext]  refresh()

ConfigurableListableBeanFactory beanFactory=obtainFreshBeanFactory();//解析Xml組裝eanDefinition

...

invokeBeanFactoryPostProcessors(beanFactory);

registerBeanPostProcessors(beanFactory);//註冊BeanPostProcessors.

...

finishBeanFactoryInitialization(beanFactory);//根據BeanDefinition初始化Bean


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章