spring启动过程之源码跟踪(续beanfactory)--spring Debug
2013-03-12 17:58
591 查看
1.初始化过程
2.入门
3.读取配置文件XmlBeanDefinitionReader.java
4.读取方法DefaultBeanDefinitionDocumentReader.java
1 Resource res = new ClassPathResource("/applicationContext.xml"); XmlBeanFactory factory = new XmlBeanFactory(res);
2.入门
/** * Create a new XmlBeanFactory with the given input stream, * which must be parsable using DOM. * @param resource XML resource to load bean definitions from * @param parentBeanFactory parent bean factory * @throws BeansException in case of loading or parsing errors */ public XmlBeanFactory(Resource resource, BeanFactory parentBeanFactory) throws BeansException { super(parentBeanFactory); 10 this.reader.loadBeanDefinitions(resource); }
3.读取配置文件XmlBeanDefinitionReader.java
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()); } Set currentResources = (Set) this.resourcesCurrentlyBeingLoaded.get(); if (currentResources == null) { currentResources = new HashSet(4); this.resourcesCurrentlyBeingLoaded.set(currentResources); } if (!currentResources.add(encodedResource)) { throw new BeanDefinitionStoreException( "Detected recursive loading of " + encodedResource + " - check your import definitions!"); } try { InputStream inputStream = encodedResource.getResource().getInputStream(); try { InputSource inputSource = new InputSource(inputStream); if (encodedResource.getEncoding() != null) { inputSource.setEncoding(encodedResource.getEncoding()); } 23 return doLoadBeanDefinitions(inputSource, encodedResource.getResource()); } finally { inputStream.close(); } } catch (IOException ex) { throw new BeanDefinitionStoreException( "IOException parsing XML document from " + encodedResource.getResource(), ex); } finally { currentResources.remove(encodedResource); if (currentResources.isEmpty()) { this.resourcesCurrentlyBeingLoaded.set(null); } } }
4.读取方法DefaultBeanDefinitionDocumentReader.java
/** * Parses bean definitions according to the "spring-beans" DTD. * <p>Opens a DOM Document; then initializes the default settings * specified at <code><beans></code> level; then parses * the contained bean definitions. */ public void registerBeanDefinitions(Document doc, XmlReaderContext readerContext) { this.readerContext = readerContext; logger.debug("Loading bean definitions"); Element root = doc.getDocumentElement(); BeanDefinitionParserDelegate delegate = createHelper(readerContext, root); preProcessXml(root); parseBeanDefinitions(root, delegate); postProcessXml(root); }
相关文章推荐
- spring启动过程之源码跟踪(上)--spring Debug
- spring启动过程之源码跟踪(续beanfactory)--spring Debug
- spring启动过程之源码跟踪(中)--spring Debug
- spring启动过程之源码跟踪(下)--spring Debug
- spring启动过程之源码跟踪(下)--spring Debug
- spring启动过程之源码跟踪(上)--spring Debug
- spring启动过程之源码跟踪(下)--spring Debug
- spring启动过程之源码跟踪(中)--spring Debug
- spring启动过程之源码跟踪(上)--spring Debug
- 2、Spring的LocalSessionFactoryBean创建过程源码分析
- 【Spring源码分析】原型Bean实例化过程、byName与byType及FactoryBean获取Bean源码实现
- Spring源码分析:非懒加载的单例Bean初始化过程(上)
- Spring原理与源码分析系列(二)- Spring IoC容器启动过程分析(上)
- 看看Spring的源码——Bean加载过程
- Spring源码学习----BeanFactory和FactoryBean的区别
- 菜鸟看spring源码(0)之BeanFactory的注册与依赖绑定
- SPRING 启动加载BEAN 的代码过程
- spring的BeanFactory加载过程
- spring beans源码解读之--XmlBeanFactory