简单介绍:
之前我们介绍了有关Bean的实例化,我们在创建Bean的时候,还可以指定Bean的作用域。所谓作用域,就是指Bean示例的有效范围,作用域的范围有五种类型,其中比较常用的有两种,一种是单例模式(singleton)和原型模式(prototype),我们也组要围绕这两种模式来进行演示和说明。
使用方法:
在我们的Bean管理XML配置文件中,我们在<Bean>标签中添加一个新的元素scope用来指定使用何种的作用域,例如:
在Bean管理XML配置文件中添加这样的语句之后,我们就可以创建出一个单例模式的User类,当然,因为我们默认的就是单例模式,所以这个配置是多余的。
那么单例模式和原型模式有什么区别呢?
单例模式指的是我们多次创建的同一个对象其实是同一对象。很绕是吧,其实就是我们在创建对象的时候,如果我们多次创建同一对象之后,返回的都是同一个对象。这样的好处就是避免多次创建对象,节省资源,但是线程不安全。
原型模式,也可以叫多例模式,顾名思义啊,就是当我们多次创建同一对象的时候,返回多个不同的对象,如果不理解理论,可以待会在代码的实现中去结合代码理解。多例模式的好处就是他是线程安全的,一个人一个对象,不会出现干扰的情况,缺点就是需要多次创建对象,导致资源可能会占用的比较多。
代码实现:
首先我们来测试一下单例模式:
我们在测试类的IoC容器中获取多个User的对象:
可以看到,我们获取了两个User的对象,那么根据之前我们说的,单例模式下,我们多次获取同一个类的对象返回的都是同一对象,那么直接让这两个对象相等,如果返回true就表示这两个类相等,也就是同一个对象,如果返回的是false,则表示不相等,现在运行来看结果:
返回的是true,那么就表示这是两个相同的对象,也就是说,在我们多次获取同一个对象的时候,IoC容器只会为我们创建一个对象,让我们重复使用。
接下来看多例模式:
将scope的值改成prototype,就表示我们创建的类是多例模式,然后我们继续回到测试类进行代码的测试:
可以看到,这次我们输出了false,说明在多例模式下,我们多次从IoC容器中获取的同一个类的对象都是一个新的对象。
注意点:
在平时的使用中,这两种模式我们更推荐单例模式,因为这样比较节省资源,但是在有些时候,比如我们不能使用同一个对象进行业务的处理,比如多线程模式,或者其他的一些应用场景的时候,我们就要根据情况来决定使用多例模式还是单例模式。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/153291.html