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错误代理

相关文章
相关标签/搜索