1. 程式人生 > 其它 >Spring中基於XML例項化Bean的四種方式

Spring中基於XML例項化Bean的四種方式

技術標籤:javaspringbeanxmlioc

Spring中基於XML例項化Bean的四種方式

1.無引數構造器(預設構造器) (最常用)

spring在建立bean的時候自動呼叫無參構造器來例項化,相當於new Bean1()

Bean1.java

public class Bean1 {
    //預設無參構造
}

applicationContext.xml

<!-- 1.預設構造器例項化物件 -->
<bean id="bean1"
class="com.alilaoye.demo02_instantiate_bean.way1.Bean1"/>

Bean1Test.java

public class Bean1Test {
    @Test
    public void test() {
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
        Bean1 bean1 = (Bean1)applicationContext.
getBean("bean1"); System.out.println(bean1); } }

2.靜態工廠方法

Bean2.java

public class Bean2 {
    //預設無參構造
}

Bean2Factory.java

public class Bean2Factory {
    public static Bean2 getBean2() {
        //在做例項化的時候,可以做其他的事情,即可以在這裡寫初始化其他物件的程式碼
        //...
        return new Bean2();
    }
}

applicationContext.xml

<!-- 1.預設構造器例項化物件 -->
<!-- 2.靜態工廠獲取例項化物件 -->
<!-- class:直接指定到靜態工廠類, factory-method: 指定生產例項的方法, spring容器在例項化工廠類的時候會自動呼叫該方法並返回例項物件 -->
<bean id="bean2" class="com.alilaoye.demo02_instantiate_bean.way2.Bean2Factory" factory-method="getBean2"/>

Bean2Test.java

public class Bean2Test {
    @Test
    public void test() {
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
        Bean2 bean2 = (Bean2)applicationContext.getBean("bean2");
        System.out.println(bean2);
    }
}

3.例項工廠方法

Bean3.java

public class Bean3 {
    //預設無參構造
}

Bean3Factory.java

public class Bean3Factory {
    public Bean3 getBean3() {
        return new Bean3();
    }
}

applicationContext.xml

<!-- 3:例項工廠的方式例項化bean -->
<bean id="bean3Factory" class="com.alilaoye.demo02_instantiate_bean.way3.Bean3Factory"/>
<!-- factory-bean相當於ref:引用一個bean物件 -->
<bean id="bean3" factory-bean="bean3Factory" factory-method="getBean3"/>

Bean3Test.java

public class Bean3Test {
    @Test
    public void test() {
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
        Bean3 bean3 = (Bean3)applicationContext.getBean("bean3");
        System.out.println(bean3);
    }
}

4.FactoryBean方式

Bean4.java

public class Bean4 {
    //預設無參構造
}

Bean4Factory.java

spring在例項化物件的時候回判斷是否該物件實現了FactoryBean介面,如果實現了就直接呼叫

public class Bean4Factory implements FactoryBean<Bean4> {
    //產生物件
    @Override
    public Bean4 getObject() throws Exception {
        return new Bean4();
    }

    @Override
    public Class<?> getObjectType() {
        return null;
    }
}

applicationContext.xml

<!-- 4:FactoryBean-->
<!--spring在例項化物件的時候會判斷是否該物件實現了FactoryBean介面,如果實現了就直接呼叫getObject()方法,並返回執行結果-->
<bean id="bean4" class="com.alilaoye.demo02_instantiate_bean.way4.Bean4Factory"/>

Bean3Test.java

public class Bean4Test {
    @Test
    public void test() {
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
        Bean4 bean4 = (Bean4)applicationContext.getBean("bean4");
        System.out.println(bean4);
    }
}