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

全國(guó)咨詢/投訴熱線:400-618-4000

SpringBean的配置中Bean的范圍配置

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

好口碑IT培訓(xùn)

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

singleton:?jiǎn)卫J(rèn)值,Spring容器創(chuàng)建的時(shí)候,就會(huì)進(jìn)行Bean的實(shí)例化,并存儲(chǔ)到容器內(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í),獲得兩次對(duì)象打印結(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

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

Bean的范圍配置

當(dāng)scope設(shè)置為prototype時(shí),獲得兩次對(duì)象打印結(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

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

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

0 分享到:
和我們?cè)诰€交談!