繁体   English   中英

管理单例豆

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM