Spring2.0䏿–°å¢žäº†ä¸€ä¸ªç”¨æ¥è¡¨½CºBean范围的Scope接å£
  public interface Scope {
  Object get(String name, ObjectFactory objectFactory);//æ ÒŽ®åç§°åŠåˆ›å»ºå·¥åނ得åˆîC¸€ä¸ªBean实例
  Object remove(String name);//åˆ é™¤ä¸€ä¸ªæŒ‡å®šå¿U°çš„Bean
  }
  在容器ConfigurableBeanFactory接å£ä¸å®šä¹‰äº†Bean工厂有关Scope注册的相å…Ïx–¹æ³•,使得å¯å¾€Bean工厂ä¸åŠ å…¥æ–°¾cÕdž‹çš„Beanã€?br />  public interface ConfigurableBeanFactory extends HierarchicalBeanFactory,
  void registerScope(String scopeName, Scope scope);//å¾€Beanå·¥åŽ‚ä¸æ·»åŠ ä¸€ä¸ªæ–°çš„èŒƒå›?é»˜è®¤åªæœ‰ä¸¤ç§èŒƒå›´åQšsingletonåŠprototype)
  void destroyScopedBean(String beanName);//销æ¯B ean工厂ä¸èŒƒå›´Bean
  }
  在AbstractFactoryBeançš„getBeanæ–ÒŽ³•ä¸å®žçŽîCº†å¯¹ç‰¹å®šScope Bean支æŒåQŒæ ¸å¿ƒä»£ç 摘è¦ï¼š
    String scopeName = mergedBeanDefinition.getScope();//å–得当å‰Bean的范å›ß_¼Œä¹Ÿå³åœ¨å®šä¹‰ä¸çš„scope=â€requestâ€çš„部分ã€?/span>
    Scope scope = (Scope) this.scopes.get(scopeName);//得到Bean工厂ä¸çš„范围处ç†å™?/span>
    if (scope == null) {
     throw new IllegalStateException("No Scope registered for scope '" + scopeName + "'");
    }
    try {
//使用scope.get(beanName,ObjectFactory)从指定的范围ä¸å¾—到或创å¾Bean实例
     Object scopedInstance = scope.get(beanName, new ObjectFactory() {
      public Object getObject() throws BeansException {
       beforePrototypeCreation(beanName);//剿‹¦æˆ?/span>
       try {
        return createBean(beanName, mergedBeanDefinition, args);//调用å类的createBean实现真æ£çš„Bean创å¾å·¥ä½œ
       }
       finally {
        afterPrototypeCreation(beanName);//åŽæ‹¦æˆ?/span>
       }
      }
     });
     bean = getObjectForBeanInstance(scopedInstance, name, mergedBeanDefinition);//˜q”回æ£ç¡®¾cÕdž‹çš„Bean实例
    }
    catch (IllegalStateException ex) {
     throw new BeanCreationException(beanName, "Scope '" + scopeName + "' is not active", ex);
    }
  默认情况下,低层的Bean工厂ä¸åªæ”¯æŒsingletonåŠprototype两秾cÕdž‹çš„Bean。当把scope讄¡½®æˆrequestå?session时将会出çŽîC¸èƒ½æ£¼‹®è¯†åˆ«Scopeçš„é”™è¯¯ã€‚è¿™æ˜¯å› ä¸ºæ™®é€šçš„Bean工厂都没有注册新的Scopeã€‚åªæœ‰åœ¨ WebApplicationContext䏿³¨å†Œæ‰æ³¨å†Œäº†æ–°¾cÕdž‹çš„Beanã€?br />  下é¢çœ‹å®žçŽ°æ³¨å†ŒScope的代ç ?
  在WebApplicationContextä¸å®šä¹‰å¸¸é‡?br />public interface WebApplicationContext extends ApplicationContext {
  String SCOPE_REQUEST = "request";
  String SCOPE_SESSION = "session";
         String SCOPE_GLOBAL_SESSION = "globalSession";
}
  然åŽåœ¨æ‰€æœ‰ç±»åž‹çš„Web应用上下文的实现ä¸ï¼Œéƒ½åœ¨Bean工厂的拦载过½E‹ä¸é€šè¿‡postProcessBeanFactoryæ–ÒŽ³•æ¥æ³¨å†Œæ–°¾cÕdž‹ ScopeåQŒå¦‚GenericWebApplicationContextã€StaticWebApplicationContextã€?
AbstractRefreshableWebApplicationContext½{‰WebApplication应用上下文实çŽîC¸ã€?br />  protected void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) {
    beanFactory.registerScope(SCOPE_REQUEST, new RequestScope());//注册request¾cÕdž‹çš„Bean
    beanFactory.registerScope(SCOPE_SESSION, new SessionScope(false));//注册session¾cÕdž‹çš„Bean
    beanFactory.registerScope(SCOPE_GLOBAL_SESSION, new SessionScope(true));//注册glogalsession  的Bean
}
  ¾l“åˆä¸Šé¢çš„代ç ,现在应该明白ä¸ÞZ»€ä¹ˆåªæœ‰åœ¨Webåº”ç”¨ä¸Šä¸‹æ–‡ä¸æ‰èƒ½ä½¿ç”¨æ–°å¢žåР䏉¿U类型的Bean了å§ã€‚当ç„Óž¼Œç”׃ºŽæœ‰äº†ScopeåQŒæˆ‘们也å¯ä»¥éžå¸¸è½ÀL¾çš„实现我们自å·Þqš„ScopeåQŒå¢žåŠ æ–°ç”¨æˆ·è‡ªå®šä¹‰ç±»åž‹çš„BeanåQŒç„¶åŽè®¾è®¡å‡ºä¸€ä¸ªé€‚åˆæˆ‘们自己的Bean工厂ã€?img src ="http://www.aygfsteel.com/lijiajia418/aggbug/64968.html" width = "1" height = "1" />
]]>