spring容器中管理的bean有五种作用域:
1、singleton:单例、也是默认的
2、prototype:原型,即每次需要该bean都会创建一个新的bean
3、request:请求级别,即每次请求创建一个bean,适用于WebApplicationContext
4、session:session会话级别,同一个session共享一个bean
5、application:应用程序级别,同一个程序共享一个bean
对于原型模式的Bean,每次都会创建一个新对象,也就是线程之间并不存在Bean共享,不会有线程安全的问题。
对于单例Bean,所有线程都共享一个单例实例Bean,因此是存在资源的竞争。有成员变量(类变量)时会有线程安全问题。一般在方法上加scope注解,或使用ThreadLocal修饰变量。