ApplicationContext

ApplicationContextAware使用理解

应该是为了在你不交给容器进行管理的模块中,获取springContext,获取beanFactory里面的bean。 所谓:不交给容器进行管理的模块 比如util包里面,或者是子线程开启的包里也是无法注入bean的。但可以获取上下文对象,多个线程一同操作共享工厂。
链接:https://www.zhihu.com/question/385241424/answer/1139326064

有状态Stateful和无状态Stateless的bean

Spring5

  1. Spring不保证bean的线程安全
  2. 尽量使用无状态bean,最直接的就是类没有成员变量,如dao,service这些类
  3. 如果有成员变量,变量是immutable(final String, final UnmodifiableList),那么也可视为无状态bean
  4. 要使有状态bean线程安全
    1. 修改bean的scope,例如prototype、request作用域。注意,例如单例bean依赖原型bean,单例并发时,原型线程也不安全
    2. 如果有变量同步访问权限,加synchronize、原子变量、并发集合
  5. 使用Threadlocal