文章目錄
-
-
- 什麼是Bean?
- Bean的兩種常用作用域
-
- 什麼是作用域?
- 小試一下
- singleton作用域
- prototype作用域
- 總結
-
什麼是Bean?
Bean是指 項目中提供業務功能的Bean ,也就是容器要管理的Bean。Bean就是一個常見的JavaBean、Java類。
Bean的兩種常用作用域
什麼是作用域?
土裡來,土裡去。個人認為作用域就是bean的應用範圍。有的bean能夠長長久久的使用,而有的bean使用一次就丢掉了。這類似于servlet裡面的request和session。request能夠在一次或者多次轉發中使用,到最後也就一個頁面用一次,出去這個頁面你就擷取不到這個request了;而session是在你不關閉網頁的前提下持續使用。
小試一下
在不改變任何bean的配置下,先執行一遍預設的建立步驟。
- 建立類Scope.java
package com.dz.scope;
public class Scope {
//裡面沒有任何内容
}
- 将Scope類裝配到容器中
<?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">
<!--scope裝配到容器中-->
<bean id="scope" class="com.dz.scope.Scope"></bean>
</beans>
- 建立測試類TestScope.java
public class TestScope {
public static void main(String[] args) {
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
//調用Spring容器裡面的對象
System.out.println("第一次調用:"+ac.getBean("scope",Scope.class));
System.out.println("第二次調用:"+ac.getBean("scope",Scope.class));
}
}
- 控制台輸出結果
顯而易見的,在Spring容器中裝配的Scope類,調用擷取兩次的情況下輸出位址相同,是以使用的是一個對象。
singleton作用域
在上面的基礎上,對配置檔案的bean做一下改變
<?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">
<!--scope裝配到容器中,并加一個scope屬性=“singleton”-->
<bean id="scope" class="com.dz.scope.Scope" scope="singleton"></bean>
</beans>
再次看控制台輸出結果
位址還是相同的,是以Spring在預設的情況下建立Bean對象是單例的(singleton)。
prototype作用域
繼續在上面的基礎上,對配置檔案的Bean進行改變
<?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">
<!--scope裝配到容器中,并加一個scope屬性="prototype"-->
<bean id="scope" class="com.dz.scope.Scope" scope="prototype"></bean>
</beans>
看控制台輸出結果
很明顯的位址不同了,說明在第二次的調用過程中,容器又又又建立了一個對象,這個建立過程叫做原型(prototype)。
總結
容器在調用對象的時候每次都是一樣的叫做singleton單例。
容器在調用對象的時候每次都不一樣的叫做prototype原型。