1 bean 標籤
作用:
用於配置對象讓 spring 來創建的。
默認情況下它調用的是類中的無參構造函數。如果沒有無參構造函數則不能創建成功。
屬性:
id:給對象在容器中提供一個唯一標識。用於獲取對象。
class:指定類的全限定類名。用於反射創建對象。默認情況下調用無參構造函數。
scope:指定對象的作用範圍。
- singleton :默認值,單例的.
- prototype :多例的.
- request :WEB 項目中,Spring 創建一個 Bean 的對象,將對象存入到 request 域中.
- session :WEB 項目中,Spring 創建一個 Bean 的對象,將對象存入到 session 域中.
- global session :WEB 項目中,應用在 Portlet 環境.如果沒有 Portlet 環境那麼globalSession 相當於 session.
- init-method:指定類中的初始化方法名稱。
- destroy-method:指定類中銷燬方法名稱。
2 bean 的作用範圍和生命週期
單例對象:scope=“singleton”
- 一個應用只有一個對象的實例。它的作用範圍就是整個引用。
生命週期:
- 對象出生:當應用加載,創建容器時,對象就被創建了。
- 對象活着:只要容器在,對象一直活着。
- 對象死亡:當應用卸載,銷燬容器時,對象就被銷燬了
多例對象:scope=“prototype”
- 每次訪問對象時,都會重新創建對象實例。
生命週期:
- 對象出生:當使用對象時,創建新的對象實例。
- 對象活着:只要對象在使用中,就一直活着。
- 對象死亡:當對象長時間不用時,被 java的垃圾回收器回收了
3. 實例化bean的三種方式
第一種方式:使用默認無參構造函數
<!--第一種方式: 使用默認構造函數構建
在spring的配置文件中使用bean標籤,配以id和class屬性之後,且沒有其他屬性和標籤
採用的就是默認構造函數創建bean對象,此時如果類中沒有默認構造函數,則對象無法創建-->
<bean id="accountService" class="com.gao.service.impl.AccountServiceImpl"></bean>
第二種方式:spring 管理實例工廠-使用實例工廠的方法創建對象
<!--
此種方式是:
先把工廠的創建交給 spring 來管理。
然後在使用工廠的 bean 來調用裏面的方法
factory-bean 屬性:用於指定實例工廠 bean 的 id。
factory-method 屬性:用於指定實例工廠中創建對象的方法。
-->
<bean id="instanceFactory" class="com.gao.factory.InstanceFactory"></bean>
<bean id="accountService" factory-bean="instanceFactory" factory-method="getAccountService"></bean>
/**
* 模擬一個工廠類,創建業務層實現類
* 此工廠創建對象,必須現有工廠實例對象,在調用方法
*/
public class InstanceFactory {
public IAccountService getAccountService(){
return new AccountServiceImpl();
}
}
第三種方式:使用靜態工廠的方法創建對象
<!--使用示例工廠的方法創建對象(使用某個類中的靜態方法創建對象,並存入spring容器)-->
<bean id="accountService" class="com.gao.factory.StaticFactory" factory-method="getAccountService"></bean>
/**
* 模擬一個工廠類
*/
public class StaticFactory {
public static IAccountService getAccountService(){
return new AccountServiceImpl();
}
}