发表于: 2019-11-20 14:46:42

0 1306


任务1,Day 4


继续昨天的任务


1) 为什么 Spring 工厂中,取出的 bean 均为单例?


A:

我首先写了个 Spring 的测试代码:

其结果为:


显然在 Spring 工厂中,取出的 bean 为单例,那么这样设计有什么好处呢?

最为明显的优点当然是没有必要每次都需要创建一个实例,节省了空间,提高了效率。

但是缺点也明显——多线程无法进行!


我尝试着简单模仿了 Spring 的做法:


获取 bean 的方法:

测试代码:

结果:


但是,这个做法是错误的,虽然也是将得到的 bean 单例化了,然而 Spring 是在加载工厂时,已经将 bean 给准备好了!!!

通常情况下,Spring 为了及时发现 DI 时出现的异常,会采取即时加载方式,但是在某些场景下,是需要懒加载的(lazy-init),即在调用 getBean() 时才创建对象。



这里是即时加载的实现方式


最终,已创建的 bean 存在于 HashMap 中,所以只需要在 getBean() 中从 HashMap 获取就行了


现在解决了 IOC 概念上的问题,就可以正式入手 Spring 的学习了~


返回列表 返回列表
评论

    分享到