4、Spring IOC容器 Bean物件例項化的3種方式

辛勤小王子發表於2020-12-18

一、構造器例項化(預設方式):要求Bean物件中要提供無參構造

TypeDao:bean物件

public class TypeDao {
    private String str;
    //無參構造
    public TypeDao() {
    }
    public TypeDao(String str) {
        this.str = str;
    }

    public void test(){
        System.out.println("TypeDao Test...");
    }
}

配置檔案:

<?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
        https://www.springframework.org/schema/beans/spring-beans.xsd">
    <!--
    構造器例項化
        對應的Bean物件需要提供空構造
    -->
    <bean id="typeDao" class="com.xxxx.dao.TypeDao"></bean>

</beans>

例項化測試:

BeanFactory factory = new ClassPathXmlApplicationContext("spring02.xml");
        TypeDao typeDao = (TypeDao) factory.getBean("typeDao");
        typeDao.test();

如果沒有提供無參構造則會報錯:
在這裡插入圖片描述

二、靜態工廠例項化:

在這裡插入圖片描述
Bean物件:

public class TypeService {
    public void test(){
        System.out.println("TypeService Test...");
    }
}

靜態工廠類:


/**
 * Created by Jack on 2020.12.18.
 * 定義靜態工廠類
 */
public class StaticFactory {
    /**
     * 定義對應的靜態方法
     * @return
     */
    public static TypeService createService(){
        return new TypeService();
    }
}

spring配置檔案:

<?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
        https://www.springframework.org/schema/beans/spring-beans.xsd">

    <!--
    靜態工廠例項化
    1、定義工廠類及對應的靜態方法
    2、配置bean物件對應的工廠類及靜態方法

    id:需要被例項化的bean物件的id
    class:靜態工廠類的路徑
    factory-method:靜態工廠類中例項化bean物件的方法
    -->
    <bean id="typeService" class="com.xxxx.factory.StaticFactory" factory-method="createService"></bean>

</beans>

例項化測試:

 //靜態工廠例項化
        TypeService typeService = (TypeService) factory.getBean("typeService");
        typeService.test();

三、例項化工廠例項化

Bean物件:

public class TypeController {
    public void test(){
        System.out.println("TypeController Test...");
    }
}

例項化工廠:

/**
 * Created by Jack on 2020.12.18.
 * 定義例項化工廠
 */
public class InstanceFactory {
    /**
     * 定義方法
     * @return
     */
    public TypeController createController(){
        return new TypeController();
    }

}

spring配置檔案:

<?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
        https://www.springframework.org/schema/beans/spring-beans.xsd">

    <!--
        例項化工廠
        1、定義工廠類及對應的方法
        2、配置工廠物件
        3、配置bean物件對應的工廠物件及工程方法

        factory-bean:工廠物件對應的id屬性值
        factory-method:工廠類中的方法
    -->
    <!--工廠物件-->
    <bean id="instanceFactory" class="com.xxxx.factory.InstanceFactory"></bean>
    <!--bean物件-->
    <bean id="typeController" factory-bean="instanceFactory" factory-method="createController"></bean>
</beans>

例項化測試:

//例項化工廠例項化
        TypeController typeController = (TypeController) factory.getBean("typeController");
        typeController.test();

相關文章