我知道对此已经有很多问题。但是他们没有澄清我的疑虑。
在这里建议to achieve thread safety, design your beans stateless.我不理解。
如果我有一个服务类,并且其中只有一个状态(没有其他实例变量)。
@Service
class MyService {
@Autowired
MyRepository repository;
//business method that call repository methods
}
MyRepository
具有默认的单例作用域。 org.springframework.data.mongodb.core.MongoTemplate
已自动连线。那是我在MyReporitory
中拥有的唯一实例变量。
@Repository
class MyRepository {
@Autowired
MongoTemplate mongo;
//methods that use MongoTemplate reference
}
那么这是怎么回事?服务/存储库线程安全吗?
答案 0 :(得分:1)
如果存储库引用是不可变的(仅自动连线一次,或在服务对象构建期间设置),则您的服务bean是线程安全的。
通常来说,当多个线程同时访问Bean的状态并且该状态是可变的(可以更改)时,您可能会遇到线程问题。如果状态是不可变的,并且被多个线程读取,则不必担心多线程问题。