Spring DeferredImportSelector类解析

本文深入解析Spring中的DeferredImportSelector类,它在Spring Boot自动装配过程中起着关键作用。虽然不常见,但理解其工作原理对于掌握Spring Boot自动配置至关重要。文章详细介绍了 DeferredImportSelector的结构、源码解读,特别是process()、register()和processGroupImports()方法,以及在AutoConfigurationImportSelector和AutoConfigurationGroup中的应用。
摘要由CSDN通过智能技术生成

Spring DeferredImportSelector类解析


前言

DeferredImportSelector这个类可能很多人都没见过, 实在是他不常用,而且用起来麻烦,不过他也很重要,在springboot里,他承担了自动装配这样的重要任务,想要了解自动装配原理最好还是先看看spring是如何对DeferredImportSelector这个类进行解析的


一、DeferredImportSelector结构

public interface DeferredImportSelector extends ImportSelector {

	// 要使用DeferredImportSelector 就要实现下面的getImportGroup方法,并要写一个实现Group接口的 类,该方法返回一个Class,
	//表示当前DeferredImportSelector 属于哪个组的,spring会生成唯一的Group,并将返回值为该Group的DeferredImportSelector 放入一个List里
	@Nullable
	default Class<? extends Group> getImportGroup() {
		return null;
	}

DeferredImportSelector 继承自ImportSelector 接口, 但却并未实现其selectImports方法, 对DeferredImportSelector 子类也不会调用该方法

Group 是DeferredImportSelector 的内部一个接口

interface Group {
	//上面分组完成后spring会调用该方法,循环List里的DeferredImportSelector 类,并循环调用process方法
	//AnnotationMetadata :当前循环的DeferredImportSelector 的导入配置类(当前@Import注解的类)
	void process(AnnotationMetadata metadata, DeferredImportSelector selector);


	//每个Group只执行一次,返回一个迭代器,spring会使用迭代器的forEach方法进行迭代,
	//想要导入spting容器的类要封装成Entry对象,且返回的对象不能为null,会报错(设计问题)
	Iterable<Entry> selectImports();

Entry 是Group 的一个内部类

class Entry {

	private final AnnotationMetadata metadata;

	private final String importClassName;
	
	//AnnotationMetadata :必须是一个将DeferredImportSelector 导入的配置类,要不会报错,而且不能new
	//importClassName:需要导入类的类路径名
	public Entry(AnnotationMetadata metadata, String importClassName) {
		this.metadata = metadata;
		this.importClassName = importClassName;
	}
	
	public AnnotationMetadata getMetadat
  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值