spring 용기의refresh () 방법 설명

35788 단어 java 백엔드
스프링 용기refresh () 필기 하기;작업 작성 및 새로 고침

***1prepareRefresh();   ***
	1)initPropertySources();2)getEnvironment().validateRequiredProperties();        
	3)this.earlyApplicationEvents = new LinkedHashSet<ApplicationEvent>();***2this.earlyApplicationEvents = new LinkedHashSet<ApplicationEvent>();  bean  ***
	1)refreshBeanFactory();  【  】bean  
		     beanFactory this.beanFactory = new DefaultListableBeanFactory();
		this.beanFactory.setSerializationId(getId());  id
	2)getBeanFactory();     GenericApplicationContext   beanFactory
	3)、   beanFactory【DefaultListableBeanFactory】  ;
***3prepareBeanFactory(beanFactory);beanFactory      ( beanFactory      );***
	1)、  beanFactory     、       
	2)、    addBeanPostProcessor【ApplicationContextAwareProcessor】
	3)、            EnvironmentAware、EmbeddedValueResolverAware、xxx
	4)、           ;              :
				Beanfactory、ResourceLoader、ApplicationEventPublisher、ApplicationContext
	5)、         【ApplicationListenerDetector】
	6)、      AspectJ;
	7)、 beanFactory         :
				environment【ConfigurableEnvironment】、					   systemProperties【Map<String,Object>】、systemEnvironment【Map<String, Object>***4postProcessBeanFactory(beanFactory); beanFactory                ;【   】***
	1)、           beanfactory                
===================================================   beanFactory        ===================================================================================

***5invokeBeanFactoryPostProcessors(beanFactory);  beanfactoryPostprocessor***

; 
	    beanfactoryPostProcessor; beanFactory      , beanFactory           (        )
	             :beanFactoryPostProcessor、BeanDefinitionRegistryPostProcessor  
	    	1)、  invokeBeanFactoryPostProcessors【invokeBeanFactoryPostProcessors】
	    		1)、   BeanDefinitionRegistryPostProcessor
		    		1)、      BeanDefinitionRegistryPostProcessor
		    		2)、       PriorityOrdered   BeanDefinitionRegistryPostProcessor  postProcessor.postProcessBeanDefinitionRegistry(registry);    
		    		3)、      Ordered   BeanDefinitionRegistryPostProcessor  postProcessor.postProcessBeanDefinitionRegistry(registry);    
					4)、             BeanDefinitionRegistryPostProcessor  postProcessor.postProcessBeanDefinitionRegistry(registry);    
				2)、   BeanFactoryPostProcessor
					1)、      BeanDefinitionRegistryPostProcessor
		    		2)、       PriorityOrdered   BeanPostProcessor  postProcessor.postProcessBeanFactory(beanFactory);    
		    		3)、      Ordered   BeanPostProcessor  postProcessor.postProcessBeanFactory(beanFactory);    
					4)、             BeanPostProcessor  postProcessor.postProcessBeanFactory(beanFactory);    
***6registerBeanPostProcessors(beanFactory);  beanPostProcessor(Bean     )【Register bean processors that intercept bean creation  bean     】***
	      BeanpostProcessor Bean              
	BeanPostProcessor、
	DestructionAwareBeanPostProcessor、
	InstantiationAwareBeanPostProcessor、
	SmartInstantiationAwareBeanPostProcessor、
	MergedBeanDefinitionPostProcessor【internalPostProcessors】
	1)、      BeanPostProcessor            PriorityOrdered、Ordered         
	2)、   PriorityOrdered     BeanPostprocessor
		    beanPostProcessor   beanFactory 
		beanFactory.addBeanPostProcessor(postProcessor);
	3)、   Ordered  
	4)、                beanPostProcessor
	5)、        MergedBeanDefinitionPostProcessor
	6)、                【ApplicationListenerDetector】    bean         bean   ApplicationListener,
		   this.applicationContext.addApplicationListener((ApplicationListener<?>) bean); 
***7initMessageSource();   MessageSource  (      ,    ,    )***
	1)、  beanFactory;getBeanFactory();
	2)、  id       messageSource  
		          AbstractApplicationContext   messageSource  ;           DelegatingMessageSource   messageSource
			MessageSource:             key  ;         
	3)、     MessageSource      ,          MessageSource  String getMessage(String code, Object[] args, Locale locale) throws NoSuchMessageException;
		beanFactory.registerSingleton();
***8initApplicationEventMulticaster();           【   】***
	1)、  beanFactory;getBeanFactory();
	2)、beanFactory   applicationEventMulticaster ApplicationEventMulticaster  
	3)、             SimpleApplicationEventMulticaster            ,          
		this.applicationEventMulticaster = new SimpleApplicationEventMulticaster(beanFactory);
***9onRefresh();     *** 
	1)、        ,               (                        )
10registerListeners();            ApplicationListener    
	1)、      ApplicationListener
		 getBeanNamesForType(ApplicationListener.class, true, false);
    2)getApplicationEventMulticaster().addApplicationListenerBean(listenerBeanName);
    3)***11finishBeanFactoryInitialization(beanFactory);           bean;***
	1)、beanFactory.preInstantiateSingletons();         bean
		1)、        bean,            
		2)、  bean     【RootBeanDefinition】
		3)、Bean     ,     ,     ;
			1)、   FactoryBean;     FactoryBean   Bean
			2)、      Bean,   geBean(bean);    
				geBean(beanName)1)doGetBean(name, null, null, false);
					2)、         bean,          Bean      (       bean       )
						 private final Map<String, Object> singletonObjects = new ConcurrentHashMap<String, Object>(256);
			3)、       ,   Bean       ;
			4)markBeanAsCreated(beanName);    Bean     
			5)、  Bean      getMergedLocalBeanDefinition(beanName);【RootBeanDefinition】
			6)、mbd.getDependsOn();    bean      bean;       geBean(beanName)      bean    
			7)、     Bean     ;
			    1)createBean(beanName, mbd, args);
			    2)resolveBeforeInstantiation(beanName, mbdToUse); beanPostProcessor         
			 		     InstantiationAwareBeanPostProcessors     
			 		    postProcessBeforeInstantiation(beanClass, beanName);         applyBeanPostProcessorsAfterInitialization(bean, beanName);
			    3)、     InstantiationAwareBeanPostProcessors        
			    4)、Object beanInstance = doCreateBean(beanName, mbdToUse, args);  bean
			    	1)、  bean  createBeanInstance(beanName, mbd, args);
			   			                  Bean  
			    	2)applyMergedBeanDefinitionPostProcessors(mbd, beanType, beanName);
			    		  MergedBeanDefinitionPostProcessor 
			    			postProcessMergedBeanDefinition(mbd, beanType, beanName);
			  		3)populateBean(beanName, mbd, instanceWrapper); bean     
			  			    :
			  			1)、          beanPostProcessor     InstantiationAwareBeanPostProcessor     
			  					postProcessAfterInstantiation(bw.getWrappedInstance(), beanName)  
			  			2)、            beanPostProcessor     InstantiationAwareBeanPostProcessor     
			  					postProcessPropertyValues(pvs, filteredPds, bw.getWrappedInstance(), beanName);  
			  				==========    ============
			  		    3)applyPropertyValues(beanName, mbd, bw, pvs); bean    【    set  】
			  		4)initializeBean(beanName, exposedObject, mbd);bean   
			  		 	1)、【   Aware    】invokeAwareMethods(beanName, bean);  aware     
			  		 		BeanNameAware、BeanClassLoaderAware、BeanFactoryAware
			  		 	2)、【          】applyBeanPostProcessorsBeforeInitialization(wrappedBean, beanName);
			  		 		BeanPostProcessor.postProcessBeforeInitialization();
			  		 	3)、【       】invokeInitMethods(beanName, wrappedBean, mbd);
			  		 		1)、   InitializingBean                 
			  		 		2)@Bean(init=“”)
			  		 	4)、【               】applyBeanPostProcessorsAfterInitialization(wrappedBean, beanName);
			  		 		beanProcessor.postProcessAfterInitialization(result, beanName);
			  	    5)、【  bean      】registerDisposableBeanIfNecessary(beanName, bean, mbd);
			  	 5)、    Bean      singletonObjects【   】
		  	 ioc              map,        Bean、    、        
		   bean   getBean();      
		 	    Bean   SmartInitializingSingleton   :        afterSingletonsInstantiated  
***12finishRefresh();  BeanFactory     ;ioc        ***		
	1)initLifecycleProcessor();	                ;LifecycleProcessor
		   LifecycleProcessor    ,   beanFactory     
		               ;        DefaultLifecycleProcessor           
			void onRefresh();
			void onClose();
	2)getLifecycleProcessor().onRefresh(); 	
	3)publishEvent(new ContextRefreshedEvent(this));          
	4)、LiveBeansView.registerApplicationContext(this);

##   

좋은 웹페이지 즐겨찾기