我正在学习 spring,在我的第一个应用程序中,我有不同类型的 bean(@Repository,@Service)。现在我了解到这些 bean 的默认范围是单例。
我的情况如下,我有两个服务,我在其中注入(inject)相同的 Dao。
@Service
public class MyFirtsServiceImpl implements MyFirtsService{
@Autowired
UserDao userDao
}
@Service
public class MySecondServiceImpl implements MySecondService{
@Autowired
UserDao userDao
}
@Repository
public class UserDao {
//methods to manage the persistence
}
现在我对这个情况有些疑问。作为 userDao 一个单例 bean,那么注入(inject)到两个服务中的 UserDao 实例是相同的吗?容器如何管理这个?
最佳答案
首先,单例设计模式的含义是每个应用程序只有一个实例,并且Spring容器管理单例设计模式。
当一个 bean 是单例时,只会管理该 bean 的一个共享实例,并且对具有与该 bean 定义匹配的 id 或多个 id 的 bean 的所有请求都将导致 Spring 容器返回该一个特定的 bean 实例。
换句话来说,当您定义一个 bean 定义并将其范围限定为单例时,Spring IoC 容器将创建由该 bean 定义定义的对象的一个实例。这个单个实例将存储在此类单例 bean 的缓存中, 并且对该命名 bean 的所有后续请求和引用都将导致返回缓存的对象。
如需更多帮助,请访问here
关于java - 管理单例 Bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24587771/