1. 程式人生 > >1.Spring學習筆記之 ———— Bean的例項化

1.Spring學習筆記之 ———— Bean的例項化

    什麼是Bean的例項化?

    在面向物件的程式中,想要使用某個物件,就需要先例項化這個物件。Spring中,想要使用容器中的Bean,也需要例項化Bean。

    其類似於當我們需要建立一個類物件而去new這個類一樣。通常來說,當我們需要用到一個Bean的時候,只有將其例項化之後,我們才可以去呼叫它。在Spring中,Spring會自動幫我們例項化好Bean,只需要我們告訴Spring我們需要用到哪個Bean,並在Spring的配置檔案配置相關程式碼,這樣,Spring就可以自動幫我們例項化好Bean,然後我們直接用getBean方法就可以獲得Bean的例項化。

    Spring中,有三種例項化方式:分別為構造器例項化(最常用)

靜態工廠例項化例項工廠方式例項化

    接下來,我將詳細講解這三種例項化的區別以及使用。

一、構造器例項化

概述:構造器例項化是指Spring容器通過Bean對應的類中預設的建構函式(無參建構函式)來例項化Bean

具體示例:

首先,我們先隨意建立一個Bean類

Bean.java:

package com.zzc.contructor;

public class Bean1 {
    //什麼都不用做
}

接著,在Spring配置檔案中配置

beans1.xml:

<?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-4.3.xsd">

    <!--構造器例項化:id為自定義Bean的名字,class是Bean1類包的位置-->
    <bean id="bean1" class="com.zzc.contructor.Bean1">

<beans>

測試,寫一個main函式,做測試

Test1.java:

package com.zzc.contructor;

public class Test1 {

    public static void main(String[] args) {]
        //定義配置檔案路徑
        String xmlPath = "com/zzc/contructor/beans1/xml";
        //Application Context 在載入配置檔案時,對Bean進行例項化
        ApplicationContext appliContext = new ClassPathXmlApplicationContext(xmlPath);
        //getBean方法裡放的是在xml檔案裡的id名
        Bean1 bean = (Bean1) appliContext.getBean("bean1");
        System.out.println(bean);
    }
}

執行結果:

[email protected]

二、靜態工廠方式例項化

概述:靜態工廠方式要求建立一個靜態工廠的方法來建立Bean的例項

具體示例:

首先,還是一樣,先建立一個Bean類:

Bean2.java:

package com.zzc.staticFactory

public class Bean2 {
    //什麼都不用寫
}

接著,建立一個Bean工廠類,並在其裡面定義一個靜態的返回Bean物件的方法:

Bean2Factory.java:

package com.zzc.staticFactory

public class Bean2Factory {

    //注意這裡的這個方法是static的
    public static Bean2 createBean() {
        return new Bean2();
    }

}

然後在xml檔案裡面配置:

beans2.xml:

<?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-4.3.xsd">
    <!--這裡的class裡面的地址是Bean工廠的地址,而不是Bean的地址-->
    <!--factory-method方法中放的就是工廠中的靜態方法的方法名-->
    <bean id="bean2" class="com.zzc.staticFactory.Bean2Factory" factory-method="createBean"/> 

<beans>

搞定,測試,測試:

Test2.java:

package com.zzc.staticFactory;

public class Test2 {

    public static void main(String[] args) {
        String xmlPath = "com/zzc/staticFactory/beans2.xml"
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlPath);

        System.out.println(applicationContext.getBean("bean2"));
    }

}

執行結果:

[email protected]

三、例項工廠方式例項化:

概述:例項工廠採用直接建立Bean例項的方式,在配置檔案中,通過factory-bean屬性配置一個例項工廠,然後使用factory-method屬性確定使用工廠中的哪個方法。

具體示例:

首先,還是一樣,建立一個Bean類

Bean3.java:

package com.zzc.factory;

public class Bean3 {
    //什麼都不用寫
}

接著,建立我們的Bean工廠類:

Bean3Factory.java:

package com.zzc.factory;

public class Bean3Factory {

    public Bean3Factory() {
        System.out.println("bean3工廠例項化中");
    }

    public Bean3 createBean() {
        return new Bean3();
    }

}

最後,在xml配置檔案中這樣配置:

beans3.xml:

<?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-4.3.xsd">

    <!--配置工廠-->
    <bean id="bean3Factory" class="com.zzc.factory.Bean3Factory "/>
    <!--使用factory-bean屬性指向配置的例項工廠,使用factory-method屬性確定使用工廠中哪個方法-->
    <bean id="bean3" factory-bean="bean3Factory" factory-method="createBean"/>

<beans>

測試,測試:

Test3.java:

package com.zzc.factory;

public class Test3 {

    public static void main(String[] args) {
        String xmlPath = "com/zzc/factory/beans3.xml";
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlPath);
        System.out.println(applicationContext.getBean("bean3"));
    }

}

執行結果:

bean3工廠例項化中

[email protected]

    至此,Spring例項化Bean的三種方式就已經介紹完啦,希望對你們有幫助!