日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

Spring-Bean标签属性scope范围

發布時間:2024/10/5 javascript 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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配置文件

<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><bean id="userDao" class="com.hao.dao.impl.UserDaoImpl" scope="singleton"></bean></beans>

測試類

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.重寫空參構造方法

public class UserDaoImpl implements UserDao {public UserDaoImpl(){System.out.println("UserDaoImpl被創建了");}@Overridepublic void save() {System.out.println("save running...");} }

2.打斷點,調試

我們發現在斷點處,當加載配置文件,創建spring容器時,UserDaoImpl被創建了

================================================================================================

prototype測試如下
applicationContext.xml配置文件

<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><bean id="userDao" class="com.hao.dao.impl.UserDaoImpl" scope="prototype"></bean></beans>

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范围的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。