IOC中Bean標籤和對象——Spring(1)

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();
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章