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

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

SpringBean的配置中Bean的范圍配置

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

好口碑IT培訓(xùn)

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

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

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

當(dāng)scope設(shè)置為singleton時,獲得兩次對象打印結(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ào)試,觀察可以發(fā)現(xiàn)單例池中存在 userDao 實例。

Bean的范圍配置

當(dāng)scope設(shè)置為prototype時,獲得兩次對象打印結(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ào)試,觀察可以發(fā)現(xiàn)單例池中不存在userDao實例,但是userDao的信息已經(jīng)被存儲到beanDefinitionMap中了。

斷點調(diào)試

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