[英]Managing singleton beans
我正在学习spring,在我的第一个应用程序中,我有与bean不同的种类(@ Repository,@ Service)。 现在,我了解到这些bean的默认作用域是单例。
我的情况如下,我在两个服务中注入了相同的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,然后在两个服务中注入UserDao的实例是相同的吗? 容器如何管理?
首先,单例设计模式的含义是每个应用程序只有一个实例,并且弹簧容器管理单例设计模式。
当一个bean是单例时,将仅管理该bean的一个共享实例,并且对所有具有与该bean定义匹配的id或id的bean的请求都将导致该特定的bean实例由Spring容器返回。
换句话说,当您定义一个bean定义并且其作用域为单例时,Spring IoC容器将为该bean定义定义的对象创建一个实例。 该单个实例将存储在此类单例bean的缓存中,并且对该命名bean的所有后续请求和引用将导致返回缓存的对象。
如需更多帮助,请点击此处
单例范围不是控制器最容易管理的情况吗?
它为您创建一个bean:
@Repository
public class UserDao {
@Autowire也是按类型。 所以当它看到这个:
@Autowired
UserDao userDao
它发现只有一个已经创建(或将要创建)UserDao类型的bean,并且没有模棱两可的情况。 所以它在这里注入那个豆子。
当遇到第二个相同的@Autowire情况时,它会重复执行该决定,因此将注入相同的bean。 这甚至不是一个有趣的决定。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.