javascript
Spring-Bean标签属性scope范围
scope:指對象的作用范圍,取值如下
1.singleton:默認值,單例的
2.prototype:多例的
3.request:WEB項目,Spring創建一個Bean的對象,把對象存入到request域中
4.sessin:WEB項目,Spring創建一個Bean的對象,把對象存入到sessiont域中
5.global session:WEB項目中,應用在Portlet環境,如果沒有Protlet環境那么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);} }結果:true
說明容器當中是單一對象
那UserDaoImpl什么時候被創建呢?那就來測試一下
1.重寫空參構造方法
2.打斷點,調試
我們發現在斷點處,當加載配置文件,創建spring容器時,UserDaoImpl被創建了
================================================================================================
prototype測試如下
applicationContext.xml配置文件
1.重寫UserDaoImpl空參構造方法(同上,省略代碼)
2.斷點調試
我們發現當加載配置文件,創建spring容器時,UserDaoImpl類對象沒有被創建,繼續走下一步
我們發現當調用getBean時,創建了UserDaoImpl對象,繼續執行下一步
我們發現再此getBean時,另外一個UserDaoImpl對象也被創建了,而且我們發現兩個對象的地址不一樣
說明prototype是多實例對象,且在調用getBean方法時創建類對象
======================================================================================================
總結:
1)當scope屬性取值為singleton時
Bean實例化個數:1個
Bean的實例化時機,當Spring核心配置文件被加載時,實例化配置的Bean實例(創建對象)
Bean的生命周期
*對象創建:當加載應用,創建容器時,對象就被創建了
*對象運行:只要容器在,對象一直活著
*對象銷毀:當應用卸載,銷毀容器時,對象被銷毀
2)當scope屬性取值為prototype時
Bean實例化個數:多個
Bean的實例化時機,當調用getBean()方法時,實例化Bean實例(創建對象)
Bean的生命周期
*對象創建:當使用對象時,創建新的對象實例
*對象運行:只要容器在,對象一直活著
*對象銷毀:當對象長時間不用時,就被Java的垃圾回收器(GC)回收了
總結
以上是生活随笔為你收集整理的Spring-Bean标签属性scope范围的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: spring程序开发步骤
- 下一篇: Spring配置文件-Bean生命周期配