Scope做用域以及涉及的問題

Bean的做用域

  1. Singleton(單例式):在整個應用中,只建立bean的一個實例。
  2. Prototype(原型式):每次注入或者經過Spring應用上下文獲取的時候,都會建立一個新的bean實例。
  3. Session(會話式):在Web應用中,爲每一個會話建立一個bean實例。(eg:電子商務應用中,一個bean表明一個用戶的購物車,只要同一個session一個bean)。
  4. Request(請求式):在Web應用中,爲每一個請求建立一個bean實例。

Session和Request注入Singleton中問題

@Component  
    @Scope{  
 Value=WebApplicationContext.SCOPE_SISSION,
         proxyMode=ScopeProxyMode.INTERFACES}
    Public ShoppingCart  cart(){
      
        
    }  

@Component  
public class StoreService{  
    @Autowired 
    public void setShoppingCart(ShoppingCart shoppingCart){
        this.shoppingCart=shoppingCart;
    }
}
複製代碼

分析

註解方式:經過使用@Scope當中的proxyMode方式進行代理處理,session

  • 實現了接口的類this

    @Scope(value = WebApplicationContext.SCOPE_SESSION,
      proxyMode = ScopedProxyMode.INTERFACES)
    複製代碼
  • 具體的類可使用CGLib來爲其生成一個代理spa

    @Scope(value = WebApplicationContext.SCOPE_SESSION,
      proxyMode = ScopedProxyMode.TARGET_CLASS)
    複製代碼

可能出現的exception:Scope ‘session’ is not active for the current thread錯誤代理

相關文章
相關標籤/搜索