1. 程式人生 > >Spring源碼學習筆記1

Spring源碼學習筆記1

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
class
XmlBeanFactory extends DefaultListableBeanFactory { private final XmlBeanDefinitionReader reader; public XmlBeanFactory(Resource resource) throws BeansException { this(resource, (BeanFactory)null); } public XmlBeanFactory(Resource resource, BeanFactory parentBeanFactory) throws
BeansException { 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