说明:利用代码说明scope singleton 与 prototype的区别
创建新工程
创建用户dao
增加默认构造方法
默认为单例模式
单例模式有一个特点就是在ioc初始化的过程中就会将这个对象进行创建
验证一下
运行
扫描二维码关注公众号,回复:
14395567 查看本文章

参照一下多列
没有输出
用一个对象来保存
在调用getBean的时候产生了新对象
多放几个
从这里就能了解单列和多列表现上的区别了
内容再延伸一下
打开xml进行配置
在UserService上也增加构造方法
当前配置在ioc容器初始化的过程中会产生几个对象呢?
答案是两个
因为使用的是单列所以当然会创建userService对象,除此以外又去引用了
这个对象 而userDao在文件初始化的过程中是不存在的,于是ioc容器也同样userDao的实例化
运行
默认情况下bean的顺序是按照书写的顺序创建的,但是在实际运行中为什么是userService先创建?清除prototype
为什么取消顺序正确了呢
增加prototype后第一个bean是不会在ioc容器初始化的时候自动的实例化,在实例化UserService的过程中ioc容器他需要一个userDao的实例,于是他再去创建userDao对象,也就是说当我们的某一个属性去关联到一个多例对象的时候,同样会触发实例化对象的操作
都加上prototype
在绝大多数场景下dao类service类乃至后面学习的springmvc的控制器类都是单例的。如果一个属性是恒定不变的就可以使用单例如果不断地变化就要使用多例了