解析Bean是经过定义抽象的bean reader来解析,结构图以下java
1.AbstractBeanDefinitionReader
bean definition reader的抽象基类,提供了bean factory经常使用的属性以及加载bean class的classloader
spring
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;