SpringBoot之BeanDefinitionLoader类源码学习

发布于:2025-02-10 ⋅ 阅读:(65) ⋅ 点赞:(0)

该类的作用

Spring 框架中用于加载和解析 Bean 定义的工具类。它主要用于从不同的资源(如 XML 文件、注解、Java 配置类等)中读取 Bean 定义,并将这些定义注册到 Spring 的 BeanFactory 或 ApplicationContext 中

基本属性


	//指定的资源
	private final Object[] sources;
	//用于将带有相关注解的类解析为bean
	private final AnnotatedBeanDefinitionReader annotatedReader;
	//用于将xml中类解析为bean
	private final XmlBeanDefinitionReader xmlReader;
	//用于将groovy中类解析为bean
	private BeanDefinitionReader groovyReader;
	//用于扫描包中符合指定条件的类
	private final ClassPathBeanDefinitionScanner scanner;
	// 资源加载器
	private ResourceLoader resourceLoader;

主要方法

/**
	 * 加载给定源对象的数据
	 * 该方法支持多种类型的源对象,包括Class、Resource、Package和CharSequence
	 * 如果源对象的类型不受支持,则抛出IllegalArgumentException异常
	 *
	 * @param source 数据源对象,可以是Class、Resource、Package或CharSequence类型
	 * @return 加载的数据,具体类型取决于源对象的类型
	 * @throws IllegalArgumentException 如果源对象的类型不受支持
	 */
	private int load(Object source) {
		// 确保源对象不为null,否则抛出IllegalArgumentException异常
		Assert.notNull(source, "Source must not be null");

		// 如果源对象是Class类型,调用相应的load方法
		if (source instanceof Class<?>) {
			return load((Class<?>) source);
		}

		// 如果源对象是Resource类型,调用相应的load方法
		if (source instanceof Resource) {
			return load((Resource) source);
		}

		// 如果源对象是Package类型,调用相应的load方法
		if (source instanceof Package) {
			return load((Package) source);
		}

		// 如果源对象是CharSequence类型,调用相应的load方法
		if (source instanceof CharSequence) {
			return load((CharSequence) source);
		}

		// 如果源对象的类型不受支持,抛出IllegalArgumentException异常
		throw new IllegalArgumentException("Invalid source type " + source.getClass());
	}