更新時間:2023年04月06日15時08分 來源:傳智教育 瀏覽次數(shù):
Spring開發(fā)中主要是對Bean的配置,本節(jié)我們來看Bean的范圍配置。 默認(rèn)情況下,單純的Spring環(huán)境Bean的作用范圍有兩個:Singleton和Prototype。
singleton:單例,默認(rèn)值,Spring容器創(chuàng)建的時候,就會進(jìn)行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 實例。
當(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中了。