教育行業(yè)A股IPO第一股(股票代碼 003032)

全國咨詢/投訴熱線:400-618-4000

SpringBean的配置中Bean的范圍配置

更新時(shí)間:2023年04月06日15時(shí)08分 來源:傳智教育 瀏覽次數(shù):

好口碑IT培訓(xùn)

Spring開發(fā)中主要是對Bean的配置,本節(jié)我們來看Bean的范圍配置。 默認(rèn)情況下,單純的Spring環(huán)境Bean的作用范圍有兩個(gè):Singleton和Prototype。

singleton:單例,默認(rèn)值,Spring容器創(chuàng)建的時(shí)候,就會(huì)進(jìn)行Bean的實(shí)例化,并存儲到容器內(nèi)部的單例池中,每次getBean時(shí)都是從單例池中獲取相同的Bean實(shí)例。

prototype:原型,Spring容器初始化時(shí)不會(huì)創(chuàng)建Bean實(shí)例,當(dāng)調(diào)用getBean時(shí)才會(huì)實(shí)例化Bean,每次getBean都會(huì)創(chuàng)建一個(gè)新的Bean實(shí)例。

當(dāng)scope設(shè)置為singleton時(shí),獲得兩次對象打印結(jié)果是一樣的。

<bean id="userDao" class="com.itheima.dao.impl.UserDaoImpl" scope="singleton"/>
Object userDao = applicationContext.getBean("userDao");
Object userDao2 = applicationContext.getBean("userDao");
System.out.println(userDao); //com.itheima.dao.impl.UserDaoImpl@631330c
System.out.println(userDao2); //com.itheima.dao.impl.UserDaoImpl@631330c

通過斷點(diǎn)調(diào)試,觀察可以發(fā)現(xiàn)單例池中存在 userDao 實(shí)例。

Bean的范圍配置

當(dāng)scope設(shè)置為prototype時(shí),獲得兩次對象打印結(jié)果是不一樣的。

<bean id="userDao" class="com.itheima.dao.impl.UserDaoImpl" scope="prototype"/>
Object userDao = applicationContext.getBean("userDao");
Object userDao2 = applicationContext.getBean("userDao");
System.out.println(userDao);   //com.itheima.dao.impl.UserDaoImpl@4d50efb8 
System.out.println(userDao2);  //com.itheima.dao.impl.UserDaoImpl@7e2d773b

通過斷點(diǎn)調(diào)試,觀察可以發(fā)現(xiàn)單例池中不存在userDao實(shí)例,但是userDao的信息已經(jīng)被存儲到beanDefinitionMap中了。

斷點(diǎn)調(diào)試

0 分享到:
和我們在線交談!