三 spring源码解析--- Bean解析接口结构分析

本文详细解析了如何通过定义抽象的beanreader来解析Bean定义,并介绍了Spring IoC容器在加载资源后,使用AbstractXmlApplicationContext类中的loadBeanDefinitions方法完成解析的过程。文章深入探讨了Bean定义的解析原理及其实现细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

解析Bean是通过定义抽象的bean reader来解析,结构图如下


1.AbstractBeanDefinitionReader
bean definition reader的抽象基类,提供了bean factory常用的属性以及加载bean class的classloader

public abstract class AbstractBeanDefinitionReader implements EnvironmentCapable, BeanDefinitionReader {
	/** Logger available to subclasses */
	protected final Log logger = LogFactory.getLog(getClass());
	private final BeanDefinitionRegistry registry;
	private ResourceLoader resourceLoader;
	private ClassLoader beanClassLoader;
	private Environment environment;
	private BeanNameGenerator beanNameGenerator = new DefaultBeanNameGenerator();
spring ioc 容器在加载资源后,使用该模块解析Bean,在源码中是通过AbstractXmlApplicationContext类中的loadBeanDefinitions方法完成的;

	@Override
	protected void loadBeanDefinitions(DefaultListableBeanFactory beanFactory) throws BeansException, IOException {
		// Create a new XmlBeanDefinitionReader for the given BeanFactory.
		XmlBeanDefinitionReader beanDefinitionReader = new XmlBeanDefinitionReader(beanFactory);
		// Configure the bean definition reader with this context's
		// resource loading environment.
		beanDefinitionReader.setEnvironment(this.getEnvironment());
		beanDefinitionReader.setResourceLoader(this);
		beanDefinitionReader.setEntityResolver(new ResourceEntityResolver(this));
		// Allow a subclass to provide custom initialization of the reader,
		// then proceed with actually loading the bean definitions.
		initBeanDefinitionReader(beanDefinitionReader);
		loadBeanDefinitions(beanDefinitionReader);
	}
spring ioc 就是在该方法中创建了一个XmlBeanDefinitionReader负责去读取并解析Bean;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值