Spring源碼學習筆記1
阿新 • • 發佈:2018-04-30
ror .... AD amr pen return 接口 throw final
1.Spring中最核心的兩個類
1)DefaultListableBeanFactory
XmlBeanFactory繼承自DefaultListableBeanFactory,DefaultListableBeanFactory是整個bean加載的核心部分,是Spring加載及註冊bean的默認實現
2)XmlBeanDefinitionReader
2.示例代碼
BeanFactory bf=new XmlBeanFactory(new ClassPathResource("beanFactoryTest.xml"));
XmlBeanFactory.class
public classXmlBeanFactory extends DefaultListableBeanFactory { private final XmlBeanDefinitionReader reader; public XmlBeanFactory(Resource resource) throws BeansException { this(resource, (BeanFactory)null); } public XmlBeanFactory(Resource resource, BeanFactory parentBeanFactory) throwsBeansException { super(parentBeanFactory); this.reader = new XmlBeanDefinitionReader(this); this.reader.loadBeanDefinitions(resource); } }
public int loadBeanDefinitions(Resource resource) throws BeanDefinitionStoreException {
return this.loadBeanDefinitions(new EncodedResource(resource));
}
public int loadBeanDefinitions(EncodedResource encodedResource){
....
InputSource inputSource = new InputSource(inputStream);//通過SAX方式解析XML文件
....
this.doLoadBeanDefinitions(inputSource, encodedResource.getResource());
}
3.配置文件的封裝
Resource implements InputStreamResource
4.AbstractAutowireCapableBeanFactory.ignoreDependencyInterface()
忽略給定接口的自動裝配功能
5.加載Bean
protected int doLoadBeanDefinitions(InputSource inputSource, Resource resource) throws BeanDefinitionStoreException { try { int validationMode = this.getValidationModeForResource(resource);//獲取xml文件的驗證模式 Document doc = this.documentLoader.loadDocument(inputSource, this.getEntityResolver(), this.errorHandler, validationMode, this.isNamespaceAware());//加載XML文件 return this.registerBeanDefinitions(doc, resource);//返回註冊bean的信息 } catch (BeanDefinitionStoreException var5) { throw var5; } catch (SAXParseException var6) { throw new XmlBeanDefinitionStoreException(resource.getDescription(), "Line " + var6.getLineNumber() + " in XML document from " + resource + " is invalid", var6); } catch (SAXException var7) { throw new XmlBeanDefinitionStoreException(resource.getDescription(), "XML document from " + resource + " is invalid", var7); } catch (ParserConfigurationException var8) { throw new BeanDefinitionStoreException(resource.getDescription(), "Parser configuration exception parsing XML from " + resource, var8); } catch (IOException var9) { throw new BeanDefinitionStoreException(resource.getDescription(), "IOException parsing XML document from " + resource, var9); } catch (Throwable var10) { throw new BeanDefinitionStoreException(resource.getDescription(), "Unexpected exception parsing XML document from " + resource, var10); } }
1)獲取xml文件的驗證模式
2)加載XML文件
3)返回註冊bean的信息
Spring源碼學習筆記1