我知道这个问题可能听起来很幼稚,但我对网络应用程序中bean的范围感到困惑。 我知道,对于每个请求,容器会产生一个新线程,类似于Spring Web应用程序,每个请求都会生成一个新线程,那么为什么建议我将控制器定义为单例服务,不应该是范围这些bean是原型,因为每个请求即线程都有自己的控制器实例,服务可以使用。
请赐教。
答案 0 :(得分:6)
这将是一笔巨大的开销。如果你的代码正确地是线程安全的,那么每个请求都没有理由需要它自己的服务bean,这通常意味着不会在bean上保留任何每个请求状态。
答案 1 :(得分:3)
即使创建了新线程(或根据配置重新使用),也会重新使用控制器和服务实例。如果控制器和服务设计得很好,它们可以在请求和不可变的情况下是无状态的,这将使它们成为线程安全的。当它们的状态在创建之后不会改变时,它也会导致更少的对象创建。
答案 2 :(得分:1)
https://gottalovedev.wordpress.com/2014/11/23/bean-scope/
给这个读一读。我相信它会有所帮助。
答案 3 :(得分:0)
我认为这取决于你是否需要在bean中存储任何状态。通常,我编写单例,以便它们不包含任何状态,仅用于计算业务逻辑。如果没有需要管理的状态,那么让所有线程共享那个单例实例是可以接受的。