1.Spring中的bean的作用域有哪些?
1.singleton:唯一bean实例,Spring中的bean默认都是单例的。
2.prototype:每次请求都会创建一个新的bean实例。
3.request:每一次HTTP请求都会产生一个新的bean,该bean仅在当前HTTP request内有
效。
4.session:每一次HTTP请求都会产生一个新的bean,该bean仅在当前HTTP session内有
效。
5.global-session:全局session作用域,仅仅在基于Portlet的Web应用中才有意义,
Spring5中已经没有了。Portlet是能够生成语义代码(例如HTML)片段的小型Java Web插
件。它们基于Portlet容器,可以像Servlet一样处理HTTP请求。但是与Servlet不同,每个
Portlet都有不同的会话。
2. Spring中的单例bean的线程安全问题了解吗?
大部分时候我们并没有在系统中使用多线程,所以很少有人会关注这个问题。单例bean存在线
程问题,主要是因为当多个线程操作同一个对象的时候,对这个对象的非静态成员变量的写操
作会存在线程安全问题。
有两种常见的解决方案:
1.在bean对象中尽量避免定义可变的成员变量(不太现实)。
2.在类中定义一个ThreadLocal成员变量,将需要的可变成员变量保存在ThreadLocal中(推
荐的一种方式)。
《Spring 中的bean 是线程安全的吗?》:https://www.cnblogs.com/myseries/p/11729800.html
《Spring框架中的Bean是线程安全的吗?如果线程不安全,要如何处理?》:https://blog.youkuaiyun.com/qq_37283570/article/details/117171271