浏览 4596 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-04-01
除了基于Properties文件读取bean的定义,这里介绍另一种读取bean的定义方式。这中方式更为常见。 XmlBeanDefinitionReader 主要方法介绍: loadBeanDefinitions();//加载bean的定义,同样是通过用被指定的编码方式来读取流xml资源文件。同样返回定义的bean的数量 public int loadBeanDefinitions(EncodedResource encodedResource) throws BeanDefinitionStoreException { Assert.notNull(encodedResource, "EncodedResource must not be null"); if (logger.isInfoEnabled()) { logger.info("Loading XML bean definitions from " + encodedResource.getResource()); } try { InputStream inputStream = encodedResource.getResource().getInputStream(); try { InputSource inputSource = new InputSource(inputStream); if (encodedResource.getEncoding() != null) {//如果指定了编码方式,就用指定的编码为流的编码 inputSource.setEncoding(encodedResource.getEncoding()); }//这类调用该方式真正的做到了加载bean定义 return doLoadBeanDefinitions(inputSource, encodedResource.getResource()); } finally {//关闭流 inputStream.close(); } } catch (IOException ex) { throw new BeanDefinitionStoreException( "IOException parsing XML document from " + encodedResource.getResource(), ex); } } doLoadBeanDefinitions();该方法真正完成加载bean定义的工作 protected int doLoadBeanDefinitions(InputSource inputSource, Resource resource) throws BeanDefinitionStoreException { try {//取得xml文件的文档验证方式,比如dtd,xsd。 int validationMode = getValidationModeForResource(resource);//加载器加载xml文件。 Document doc = this.documentLoader.loadDocument( inputSource, this.entityResolver, this.errorHandler, validationMode, this.namespaceAware);//调用下面介绍的方法注册bean到工厂 return registerBeanDefinitions(doc, resource); } catch (BeanDefinitionStoreException ex) { throw ex; } catch (ParserConfigurationException ex) { throw new BeanDefinitionStoreException( "Parser configuration exception parsing XML from " + resource, ex); } catch (SAXParseException ex) { throw new BeanDefinitionStoreException( "Line " + ex.getLineNumber() + " in XML document from " + resource + " is invalid", ex); } catch (SAXException ex) { throw new BeanDefinitionStoreException("XML document from " + resource + " is invalid", ex); } catch (IOException ex) { throw new BeanDefinitionStoreException("IOException parsing XML document from " + resource, ex); } catch (Throwable ex) { throw new BeanDefinitionStoreException("Unexpected exception parsing XML document from " + resource, ex); } } registerBeanDefinitions();这里完成注册bean到工厂的工作。 public int registerBeanDefinitions(Document doc, Resource resource) throws BeanDefinitionStoreException { if (this.parserClass != null) {//拿到解析器负责从xml解析定义的bean,并负责将它们注册到工厂 XmlBeanDefinitionParser parser = (XmlBeanDefinitionParser) BeanUtils.instantiateClass(this.parserClass); return parser.registerBeanDefinitions(this, doc, resource); }//若解析器为null,就创建一个documentReader ,把解析bean定义并注册bean到工厂的工作交给它完成 BeanDefinitionDocumentReader documentReader = createBeanDefinitionDocumentReader(); int countBefore = getBeanFactory().getBeanDefinitionCount(); documentReader.registerBeanDefinitions(doc, createReaderContext(resource)); return getBeanFactory().getBeanDefinitionCount() - countBefore; } 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |