我一直在努力理解 Spring Bean 。根据我的理解,默认情况下,所有bean都是singleton,在第一次请求时创建lazy init属性设置为true的singleton bean,在创建应用程序上下文时创建lazy init属性设置为false的singleton bean。
那么,在应用程序中,当用户请求传入时(每个请求都是一个单独的线程),在程序/类中请求时,所有这些线程是否共享相同的单例bean?
我一直在努力理解 Spring Bean 。根据我的理解,默认情况下,所有bean都是singleton,在第一次请求时创建lazy init属性设置为true的singleton bean,在创建应用程序上下文时创建lazy init属性设置为false的singleton bean。
那么,在应用程序中,当用户请求传入时(每个请求都是一个单独的线程),在程序/类中请求时,所有这些线程是否共享相同的单例bean?
2条答案
按热度按时间kxeu7u2r1#
是的,如果bean是用默认作用域创建的,那么bean将在线程之间共享。但是,可以使用另一个范围来实现您提到的行为。请参见:https://docs.spring.io/spring-framework/docs/3.0.0.m3/reference/html/ch04s04.html?
kadbb4592#
是的,默认情况下(scope=='singleton'),所有线程将共享同一个singleton bean。还有另外两个bean范围,
session
以及request
,那可能就是你要找的。这个request
scope为单个http请求创建一个bean示例session
scope为每个http会话维护一个惟一的bean。要获得所有springbean作用域的列表和描述,请查看:springbean作用域