Spring 源码分析补充篇一 :DeferredImportSelector 的处理
发布日期:2021-05-10 01:56:41 浏览次数:15 分类:精选文章

本文共 6340 字,大约阅读时间需要 21 分钟。

������������

������������

���������������������������Spring Framework���������������������������������������������������������������������������������������


���������������������������������������������ConfigurationClassPostProcessor������ImportSelector���DeferredImportSelector���������������������������������������ImportSelector���������������������������������DeferredImportSelector������������������������������������������������������DeferredImportSelector������������������

������DeferredImportSelector ���������������

DeferredImportSelector���ImportSelector���������������������������������Spring������������������������������������������������������ImportSelector���DeferredImportSelector���������������������������

  • ���������������@Configuration������������������������������������������������ConfigurationClassParser#parse���������������������������������������������������������������������deferredImportSelectorHandler.process()���
  • ���������������DeferredImportSelector������������@Order���������Ordered���������������������������������������������������������������������������������������������������������������������������������

���������DeferredImportSelector���������Ordered���������@Ordered���������������������������������������������������������������������������


������������������������

1.1. DeferredImportSelector ������������

������DeferredImportSelector������������������������������������������������������������������������������������������������ConfigurationClassParser#processImports������������������DeferredImportSelector������������������������������������������������������������������������������������������������������������������������������������

// ConfigurationClassParser.DeferredImportSelectorHandler#handle	// deferredImportSelectors ������������������������ DeferredImportSelector		public void handle(ConfigurationClass configClass, DeferredImportSelector importSelector) {    		 DeferredImportSelectorHolder holder = new DeferredImportSelectorHolder(configClass, importSelector);			if (this.deferredImportSelectors == null) {    				DeferredImportSelectorGroupingHandler handler = new DeferredImportSelectorGroupingHandler();				handler.register(holder);				handler.processGroupImports();			} else {    				this.deferredImportSelectors.add(holder);			}		}

���������������������DeferredImportSelectorHandler������������������������������������������������������������������������������������������������������������������

1.2. DeferredImportSelector ���������������

ConfigurationClassParser#parse������������������������������������������deferredImportSelectorHandler.process()��������������������� Register���DeferredImportSelector���������������������������������

public void process() {    		if (deferredImports != null) {    			deferredImports.sort(DEFERRED_IMPORT_COMPARATOR);			deferredImports.forEach(handler::register);			handler.processGroupImports();		}		deferredImportSelectors.clear();	}

������������������������������������������DeferredImportSelector������������������������������������������������������������������������������������������������������������������������processGroupImports������������������������������������������


2. DeferredImportSelector ���������������������

2.1. DeferredImportSelectorHolder

DeferredImportSelectorHolder���������������������������������������������������DeferredImportSelector������������������������������������������������������������������������������������������������������grouping���processing������������������������������

2.2. handler::register

���handler::register������������������������������������������������������������������������������������DeferredImportSelectorHolder������������������������������������������������������������������������������������������������������������������������������������������������������

public void register(DeferredImportSelectorHolder deferredImport) {    		// ������������������������������������������	DelegateGrouping grouping = this.groupings.computeIfAbsent(			deferredImport.getImportSelector().getImportGroup(), new DelegateGrouping());		// ��������� DolphinHolder ������������������������		if (!this.groupings.containsKey(grouping.groupIdentifier)) {		// ������������������������������������ groupings ���		} else {		// ��������� DolphinHolder ���������������������������		grouper.add(deferredImport);		}		// ������������������������������		this.configurationClasses.put(deferredImport.getConfigurationClass().getMetadata(),			logicalNameMap.get(deferredImport.getConfigurationClass().getLogicalName()));	}

2.3. handler::processGroupImports

���processGroupImports������������������������������������������������������DeferredImportSelector���������������������������������������������������������������processImports������������������������������������������������������������������������

public void processGroupImports() {    		for (DeferredImportSelectorGrouping grouping : this.groupings.values()) {    			Predicate exclusionFilter = grouping.getCandidateFilter();			for (DeferredImportSelector.Entry entry : grouping.getImports()) {    				ConfigurationClass configurationClass = this.configurationClasses.get(entry.metadata);				try {    					processImports(configurationClass, asSourceClass(configurationClass, exclusionFilter),						GLISHulla.sourceClasses());				} catch (BeanDefinitionStoreException ex) {    					throw ex;				} catch (Throwable ex) {    					throw new BeanDefinitionStoreException( ...);				}			});		}	}

���������������������grouping.getImports()���������������������������������������������������������������������������������������������������������������������Entry������������������������������������������


���������

���������������DeferredImportSelector���������������������������������ImportSelector���selectImports���������������������������Group���������DelegateGrouping���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������DeferredImportSelector������������������������Spring���������������������


���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������

上一篇:Dubbo笔记 ① : 入门篇
下一篇:Shiro源码分析② :AbstractShiroFilter

发表评论

最新留言

第一次来,支持一个
[***.219.124.196]2025年04月26日 02时14分31秒