具有单例作用域和状态的Bean

时间:2018-09-09 18:21:33

标签: spring

我知道对此已经有很多问题。但是他们没有澄清我的疑虑。

在这里建议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
}

那么这是怎么回事?服务/存储库线程安全吗?

1 个答案:

答案 0 :(得分:1)

如果存储库引用是不可变的(仅自动连线一次,或在服务对象构建期间设置),则您的服务bean是线程安全的。

通常来说,当多个线程同时访问Bean的状态并且该状态是可变的(可以更改)时,您可能会遇到线程问题。如果状态是不可变的,并且被多个线程读取,则不必担心多线程问题。