javascript
Spring-Bean标签属性scope范围
scope:指對象的作用范圍,取值如下
1.singleton:默認值,單例的
2.prototype:多例的
3.request:WEB項目,Spring創(chuàng)建一個Bean的對象,把對象存入到request域中
4.sessin:WEB項目,Spring創(chuàng)建一個Bean的對象,把對象存入到sessiont域中
5.global session:WEB項目中,應(yīng)用在Portlet環(huán)境,如果沒有Protlet環(huán)境那么globalSession相當于session
當前只了解singleton和prototype
===================================================
singleton如下
applicationContext.xml配置文件
測試類
public class SpringTest {@Test//測試scope屬性public void test1(){ApplicationContext app=new ClassPathXmlApplicationContext("applicationContext.xml");UserDao userDao1 = (UserDao) app.getBean("userDao");UserDao userDao2 = (UserDao) app.getBean("userDao");System.out.println(userDao1==userDao2);} }結(jié)果:true
說明容器當中是單一對象
那UserDaoImpl什么時候被創(chuàng)建呢?那就來測試一下
1.重寫空參構(gòu)造方法
2.打斷點,調(diào)試
我們發(fā)現(xiàn)在斷點處,當加載配置文件,創(chuàng)建spring容器時,UserDaoImpl被創(chuàng)建了
================================================================================================
prototype測試如下
applicationContext.xml配置文件
1.重寫UserDaoImpl空參構(gòu)造方法(同上,省略代碼)
2.斷點調(diào)試
我們發(fā)現(xiàn)當加載配置文件,創(chuàng)建spring容器時,UserDaoImpl類對象沒有被創(chuàng)建,繼續(xù)走下一步
我們發(fā)現(xiàn)當調(diào)用getBean時,創(chuàng)建了UserDaoImpl對象,繼續(xù)執(zhí)行下一步
我們發(fā)現(xiàn)再此getBean時,另外一個UserDaoImpl對象也被創(chuàng)建了,而且我們發(fā)現(xiàn)兩個對象的地址不一樣
說明prototype是多實例對象,且在調(diào)用getBean方法時創(chuàng)建類對象
======================================================================================================
總結(jié):
1)當scope屬性取值為singleton時
Bean實例化個數(shù):1個
Bean的實例化時機,當Spring核心配置文件被加載時,實例化配置的Bean實例(創(chuàng)建對象)
Bean的生命周期
*對象創(chuàng)建:當加載應(yīng)用,創(chuàng)建容器時,對象就被創(chuàng)建了
*對象運行:只要容器在,對象一直活著
*對象銷毀:當應(yīng)用卸載,銷毀容器時,對象被銷毀
2)當scope屬性取值為prototype時
Bean實例化個數(shù):多個
Bean的實例化時機,當調(diào)用getBean()方法時,實例化Bean實例(創(chuàng)建對象)
Bean的生命周期
*對象創(chuàng)建:當使用對象時,創(chuàng)建新的對象實例
*對象運行:只要容器在,對象一直活著
*對象銷毀:當對象長時間不用時,就被Java的垃圾回收器(GC)回收了
總結(jié)
以上是生活随笔為你收集整理的Spring-Bean标签属性scope范围的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: spring程序开发步骤
- 下一篇: Spring配置文件-Bean生命周期配