通俗易懂spring之singleton和prototype-创新互联
关于spring bean作用域,基于不同的容器,会有所不同,如BeanFactory和ApplicationContext容器就有所不同,在本篇文章,主要讲解基于ApplicationContext容器的bean作用域。
我们提供的服务有:网站制作、成都网站设计、微信公众号开发、网站优化、网站认证、普洱ssl等。为上千多家企事业单位解决了网站和推广的问题。提供周到的售前咨询和贴心的售后服务,是有科学管理、有技术的普洱网站制作公司关于bean的作用域,在spring中,主要包括singleton,prototype,session,request,global,本篇文章主要讲解常用的两种,即:singleton和prototype.
一 singleton
singleton为单例模式,即scope="singleton"的bean,在容器中,只实例化一次。
dao示例代码:
package com.demo.dao;public class UserDao { public UserDao(){ System.out.println("UserDao 无参构造函数被调用"); } //获取用户名 public String getUserName(){ //模拟dao层 return "Alan_beijing"; } }
applicationContext.xml
test:
public class MyTest { @Test public void test(){ //定义容器并初始化 ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml"); //定义第一个对象 UserDao userDao = applicationContext.getBean(UserDao.class); System.out.println(userDao.getUserName()); //定义第二个对象 UserDao userDao2 = (UserDao) applicationContext.getBean("userDao"); System.out.println(userDao2.getUserName()); //比较两个对象实例是否是同一个对象实例 System.out.println("第一个实例:"+userDao+"\n"+"第二个实例:"+userDao2); } }
测试结果:
分析:在测试代码中,将bean定义为singleton,并先后2次通过ApplicationContext的getBean()方法获取bean(userDao),却返回相同的实例对象:com.demo.dao.UserDao@27a5f880,仔细观察,虽然获取bean两次,但是UserDao的无参构造函数却只被调用一次,这也证明了在容器中,singleton实际只被实例化一次,需要注意的是,Singleton模式的bean,ApplicationContext加载bean时,就实例化了bean。
定义bean:
测试结果:
如下代码只是加载bean,却没调用getBean方法获取bean,但UserDao却被调用了一次,即实例化。
二 prototype
prototype即原型模式,调用多少次bean,就实例化多少次。
将singleton代码改为原型
测试代码与singleton一样,但结果却不一样:
分析:通过测试结果,不难发现,调用两次bean,就实例化两次UserDao对象,且对象不一样,需要注意的是,prototype类型的bean,只有在获取bean时,才会实例化对象。
三 singleton和prototype区别
(1)singleton在容器中,只被实例化一次,而prototype在容器中,调用几次,就被实例化几次;
(2)在AppplicationContext容器中,singleton在applicaitonContext.xml加载时就被预先实例化,而prototype必须在调用时才实例化
singleton:
定义bean:
测试:
prototype:
定义bean:
测试:不调用
测试:调用
4.singleton比prototype消耗性能,在web开发中,推荐使用singleton模式,在app开发中,推荐使用prototype模式。
读者福利
加微信:haolagui521备注51CTO领取附送学习进阶架构资料、PDF书籍文档、面试资料
创新互联www.cdcxhl.cn,专业提供香港、美国云服务器,动态BGP最优骨干路由自动选择,持续稳定高效的网络助力业务部署。公司持有工信部办法的idc、isp许可证, 机房独有T级流量清洗系统配攻击溯源,准确进行流量调度,确保服务器高可用性。佳节活动现已开启,新人活动云服务器买多久送多久。
本文名称:通俗易懂spring之singleton和prototype-创新互联
路径分享:http://myzitong.com/article/dieooc.html