三 spring源碼解析--- Bean解析接口結構分析

解析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;
相關文章
相關標籤/搜索