Spring中如何将会话或请求作用域的bean注入单例bean

Spring中的单例bean,会在应用上下文加载的时候创建。如果单例bean中的属性需要注入会话作用域的bean时,此时并不存在会话作用域的bean。直到接收到某个请求创建会话之后才会创建。此时需要使用@Scope注解的proxyMode属性。

@Bean
@Scope(value=WebApplicationContext.SCOPE_SESSION,
	   proxyMode=ScopeedProxyMode.INTERFACES)
public ShoppingCart getCart(){......}

这样在单例bean创建的时候,Spring会注入一个ShoppingCart的代理。当调用ShoppingCart的方法时,代理会对其进行懒解析并将调用委托给会话作用域内真正的ShoppingCart bean.
如果ShoppingCart不是接口而是一个具体类的话,Spring就没法创建基于接口的代理了。此时必须使用CGLIB来生成基于类的代理,需设置proxyMode=ScopeedProxyMode.TARGET_CLASS,以此来表明要以生成目标类扩展的方式创建代理。

PS:Spring中两种生成代理对象的方法:
1、JDK动态代理
2、CGLIB动态代理

二者的区别:
JDK和CGLIB动态代理区别

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值