解析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;