Springrefresh()ˢ¡;
1prepareRefresh()ˢǰԤ;
	1initPropertySources()ʼһЩ;ԶԻ÷
	2getEnvironment().validateRequiredProperties();ԵĺϷ
	3earlyApplicationEvents= new LinkedHashSet<ApplicationEvent>();еһЩڵ¼
2obtainFreshBeanFactory();ȡBeanFactory
	1refreshBeanFactory();ˢ¡BeanFactory
			һthis.beanFactory = new DefaultListableBeanFactory();
			id
	2getBeanFactory();ظղGenericApplicationContextBeanFactory
	3BeanFactoryDefaultListableBeanFactoryأ
3prepareBeanFactory(beanFactory);BeanFactoryԤ׼BeanFactoryһЩã
	1BeanFactoryֱ֧ʽ...
	2ӲBeanPostProcessorApplicationContextAwareProcessor
	3úԵԶװĽӿEnvironmentAwareEmbeddedValueResolverAwarexxx
	4עԽԶװ䣻ֱκԶע룺
			BeanFactoryResourceLoaderApplicationEventPublisherApplicationContext
	5BeanPostProcessorApplicationListenerDetector
	6ӱʱAspectJ
	7BeanFactoryעһЩõ
		environmentConfigurableEnvironment
		systemPropertiesMap<String, Object>
		systemEnvironmentMap<String, Object>
4postProcessBeanFactory(beanFactory);BeanFactory׼ɺеĺô
	1ͨдBeanFactoryԤ׼Ժһ
======================BeanFactoryĴԤ׼==================================
5invokeBeanFactoryPostProcessors(beanFactory);ִBeanFactoryPostProcessorķ
	BeanFactoryPostProcessorBeanFactoryĺôBeanFactory׼ʼִ֮еģ
	ӿڣBeanFactoryPostProcessorBeanDefinitionRegistryPostProcessor
	1ִBeanFactoryPostProcessorķ
		ִBeanDefinitionRegistryPostProcessor
		1ȡеBeanDefinitionRegistryPostProcessor
		2ִʵPriorityOrderedȼӿڵBeanDefinitionRegistryPostProcessor
			postProcessor.postProcessBeanDefinitionRegistry(registry)
		3ִʵOrdered˳ӿڵBeanDefinitionRegistryPostProcessor
			postProcessor.postProcessBeanDefinitionRegistry(registry)
		4ִûʵκȼ˳ӿڵBeanDefinitionRegistryPostProcessors
			postProcessor.postProcessBeanDefinitionRegistry(registry)
			
		
		ִBeanFactoryPostProcessorķ
		1ȡеBeanFactoryPostProcessor
		2ִʵPriorityOrderedȼӿڵBeanFactoryPostProcessor
			postProcessor.postProcessBeanFactory()
		3ִʵOrdered˳ӿڵBeanFactoryPostProcessor
			postProcessor.postProcessBeanFactory()
		4ִûʵκȼ˳ӿڵBeanFactoryPostProcessor
			postProcessor.postProcessBeanFactory()
6registerBeanPostProcessors(beanFactory);עBeanPostProcessorBeanĺô intercept bean creation
		ͬӿ͵BeanPostProcessorBeanǰִʱǲһ
		BeanPostProcessor
		DestructionAwareBeanPostProcessor
		InstantiationAwareBeanPostProcessor
		SmartInstantiationAwareBeanPostProcessor
		MergedBeanDefinitionPostProcessorinternalPostProcessors
		
		1ȡе BeanPostProcessor;ôĬϿͨPriorityOrderedOrderedӿִȼ
		2עPriorityOrderedȼӿڵBeanPostProcessor
			ÿһBeanPostProcessorӵBeanFactory
			beanFactory.addBeanPostProcessor(postProcessor);
		3עOrderedӿڵ
		4עûʵκȼӿڵ
		5עMergedBeanDefinitionPostProcessor
		6עһApplicationListenerDetectorBeanɺǷApplicationListener
			applicationContext.addApplicationListener((ApplicationListener<?>) bean);
7initMessageSource();ʼMessageSourceʻܣϢ󶨣Ϣ
		1ȡBeanFactory
		2ǷidΪmessageSourceģMessageSource
			иֵmessageSourceûԼһDelegatingMessageSource
				MessageSourceȡʻļеĳkeyֵܰϢȡ
		3ѴõMessageSourceעУԺȡʻļֵʱ򣬿ԶעMessageSource
			beanFactory.registerSingleton(MESSAGE_SOURCE_BEAN_NAME, this.messageSource);	
			MessageSource.getMessage(String code, Object[] args, String defaultMessage, Locale locale);
8initApplicationEventMulticaster();ʼ¼ɷ
		1ȡBeanFactory
		2BeanFactoryлȡapplicationEventMulticasterApplicationEventMulticaster
		3һûãһSimpleApplicationEventMulticaster
		4ApplicationEventMulticasterӵBeanFactoryУԺֱԶע
9onRefresh();ࣩ
		1дˢµʱԶ߼
10registerListeners();нĿApplicationListenerע
		1õеApplicationListener
		2ÿӵ¼ɷУ
			getApplicationEventMulticaster().addApplicationListenerBean(listenerBeanName);
		3ɷ֮ǰ¼
11finishBeanFactoryInitialization(beanFactory);ʼʣµĵʵbean
	1beanFactory.preInstantiateSingletons();ʼʣµĵʵbean
		1ȡеBeanνгʼʹ
		2ȡBeanĶϢRootBeanDefinition
		3Beanǳģǵʵģأ
			1жǷFactoryBeanǷʵFactoryBeanӿڵBean
			2ǹBeangetBean(beanName);
				0getBean(beanName) ioc.getBean();
				1doGetBean(name, null, null, false);
				2ȻȡбĵʵBeanܻȡ˵Bean֮ǰдĵʵBeanᱻ
					private final Map<String, Object> singletonObjects = new ConcurrentHashMap<String, Object>(256);ȡ
				3лȡʼBeanĴ̣
				4ǵǰbeanѾ
				5ȡBeanĶϢ
				6ȡǰBeanBean;аgetBean()Beanȴ
				7ʵBeanĴ̣
					1createBean(beanName, mbd, args);
					2Object bean = resolveBeforeInstantiation(beanName, mbdToUse);BeanPostProcessorطش
						InstantiationAwareBeanPostProcessorǰִУ
						ȴpostProcessBeforeInstantiation()
						зֵpostProcessAfterInitialization()
					3ǰInstantiationAwareBeanPostProcessorûзش󣻵4
					4Object beanInstance = doCreateBean(beanName, mbdToUse, args);Bean
						 1BeanʵcreateBeanInstance(beanName, mbd, args);
						 	ù߶ĹBeanʵ
						 2applyMergedBeanDefinitionPostProcessors(mbd, beanType, beanName);
						 	MergedBeanDefinitionPostProcessorpostProcessMergedBeanDefinition(mbd, beanType, beanName);
						 3BeanԸֵpopulateBean(beanName, mbd, instanceWrapper);
						 	ֵ֮ǰ
						 	1õInstantiationAwareBeanPostProcessorô
						 		postProcessAfterInstantiation()
						 	2õInstantiationAwareBeanPostProcessorô
						 		postProcessPropertyValues()
						 	=====ֵ֮ǰ===
						 	3ӦBeanԵֵΪsetterȽиֵ
						 		applyPropertyValues(beanName, mbd, bw, pvs);
						 4BeanʼinitializeBean(beanName, exposedObject, mbd);
						 	1ִAwareӿڷinvokeAwareMethods(beanName, bean);ִxxxAwareӿڵķ
						 		BeanNameAware\BeanClassLoaderAware\BeanFactoryAware
						 	2ִкôʼ֮ǰapplyBeanPostProcessorsBeforeInitialization(wrappedBean, beanName);
						 		BeanPostProcessor.postProcessBeforeInitialization;
						 	3ִгʼinvokeInitMethods(beanName, wrappedBean, mbd);
						 		1ǷInitializingBeanӿڵʵִ֣нӿڹ涨ĳʼ
						 		2ǷԶʼ
						 	4ִкôʼ֮applyBeanPostProcessorsAfterInitialization
						 		BeanPostProcessor.postProcessAfterInitialization()
						 5עBeanٷ
					5BeanӵsingletonObjects
				iocЩMapܶMap汣˵ʵBeanϢ
		BeangetBeanԺ
			еBeanǷSmartInitializingSingletonӿڵģǣִafterSingletonsInstantiated()
12finishRefresh();BeanFactoryĳʼIOCʹɣ
		1initLifecycleProcessor();ʼйصĺôLifecycleProcessor
			ĬϴǷlifecycleProcessorLifecycleProcessorûnew DefaultLifecycleProcessor();
			뵽
			
			дһLifecycleProcessorʵ࣬BeanFactory
				void onRefresh();
				void onClose();	
		2	getLifecycleProcessor().onRefresh();
			õǰ涨ڴBeanFactoryصonRefresh()
		3publishEvent(new ContextRefreshedEvent(this));ˢ¼
		4liveBeansView.registerApplicationContext(this);
	
	======ܽ===========
	1SpringʱȻᱣעBeanĶϢ
		1xmlעbean<bean>
		2עעBean@Service@Component@Beanxxx
	2SpringʵʱЩBean
		1õbeanʱgetBeanbeanԺ󱣴У
		2ͳһʣеbeanʱfinishBeanFactoryInitialization()
	3ôBeanPostProcessor
		1ÿһbeanɣʹøֺôдǿbeanĹܣ
			AutowiredAnnotationBeanPostProcessor:Զע
			AnnotationAwareAspectJAutoProxyCreator:AOPܣ
			xxx....
			ǿĹע⣺
			AsyncAnnotationBeanPostProcessor
			....
	4¼ģͣ
		ApplicationListener¼
		ApplicationEventMulticaster¼ɷ
	
			
					
						 		
						 	
					
								
							
							
							
						
						
						
							
						
						
					
				
				
				
			

		
	
	