首页 > 编程语言 > 详细

(三)Spring 高级装配 bean的作用域@Scope

时间:2019-09-25 00:40:20      阅读:119      评论:0      收藏:0      [点我收藏+]

1.默认情况下,spring通过@Autowared注入的bean是单例的bean,但有些情况是不满足的,例如:购物车,每个会话,或每个用户登录使用的购物车都是独立的

spring的定义的作用域:

a:单例(Singleton)

b:原型(prototype):每次注入的都会创建一个新的bean实例。

c:会话(session):web应用中,每个会话创建一个bean。

d:请求(Rquest):web应用中,为每个请求创建一个bean。

例子1:

@Component
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
public class Notepad{..........}
//使用ConfigurableBeanFactory.SCOPE_PROTOTYPE的原因是,比较“prototype”更为安全。

 

例子2:使用会话和请求作用域。

在一个单例 的service里面注入一个会话作用域 的bean,spring注入service单例的时候,并不会创建会话作用域的bean。

而是当请求到来的时候创建。当会话到来时,spring注入的并不是实际的购物车bean,而是购物车bean的代理。那么创建的时机:

如图所示:

技术分享图片

 

 

 

代码:

@Component
@Scope(value=WebApplicationContext.SCOPE_SESSION,
    proxyMode=ScopedProxyMode.INTERFACES)
public ShoppingCart cart(){.........}

proxyMode的作用是表明这个代理要实现ShoppingCart接口,并将调用委托给实现的bean。

如果ShoppingCart是接口,那么则使用以上的方式注入。如果ShoppingCart是实现类,spring则使用CGLIB的方式创建代理。

proxyMode的取值则是:ScopedProxyMode.TARGET_CLASS,表明要以生成目标类的方式创建代理。

 

(三)Spring 高级装配 bean的作用域@Scope

原文:https://www.cnblogs.com/lin-bunny/p/11581920.html

(1)
(1)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!