首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

关于spring ioc容器的有关问题

2012-10-08 
关于spring ioc容器的问题在spring的源代码中,有org.springframework.beans.factory.support.BeanDefiniti

关于spring ioc容器的问题


在spring的源代码中,有org.springframework.beans.factory.support.BeanDefinitionValueResolver这么个类.
在该类中有private Object resolveReference(String argName, RuntimeBeanReference ref)这样1个方法.

源代码如下:


private Object resolveReference(String argName, RuntimeBeanReference ref) {           if (this.beanFactory.logger.isTraceEnabled()) {               this.beanFactory.logger.trace("Resolving reference from property " + argName + " in bean '" +                       this.beanName + "' to bean '" + ref.getBeanName() + "'");           }           try {               if (ref.isToParent()) {                   if (this.beanFactory.getParentBeanFactory() == null) {                       throw new BeanCreationException(                               this.beanDefinition.getResourceDescription(), this.beanName,                               "Can't resolve reference to bean '" + ref.getBeanName() +                               "' in parent factory: no parent factory available");                   }                   return this.beanFactory.getParentBeanFactory().getBean(ref.getBeanName());               }               else {                   Object bean = this.beanFactory.getBean(ref.getBeanName());                   if (this.beanDefinition.isSingleton()) {                       this.beanFactory.registerDependentBean(ref.getBeanName(), this.beanName);                   }                   return bean;               }           }           catch (BeansException ex) {               throw new BeanCreationException(                       this.beanDefinition.getResourceDescription(), this.beanName,                       "Cannot resolve reference to bean '" + ref.getBeanName() + "' while setting " + argName, ex);           }       }  private Object resolveReference(String argName, RuntimeBeanReference ref) {if (this.beanFactory.logger.isTraceEnabled()) {this.beanFactory.logger.trace("Resolving reference from property " + argName + " in bean '" +this.beanName + "' to bean '" + ref.getBeanName() + "'");}try {if (ref.isToParent()) {if (this.beanFactory.getParentBeanFactory() == null) {throw new BeanCreationException(this.beanDefinition.getResourceDescription(), this.beanName,"Can't resolve reference to bean '" + ref.getBeanName() +"' in parent factory: no parent factory available");}return this.beanFactory.getParentBeanFactory().getBean(ref.getBeanName());}else {Object bean = this.beanFactory.getBean(ref.getBeanName());if (this.beanDefinition.isSingleton()) {this.beanFactory.registerDependentBean(ref.getBeanName(), this.beanName);}return bean;}}catch (BeansException ex) {throw new BeanCreationException(this.beanDefinition.getResourceDescription(), this.beanName,"Cannot resolve reference to bean '" + ref.getBeanName() + "' while setting " + argName, ex);}}


这个方法的大致作用是,取得bean所依赖的bean实例.但这里遇到问题了.ioc容器在这里做了1个依赖关系的map.但建立了这个依赖关系后,也没有具体使用到他的地方.难以理解设计者的思想.

热点排行