1. 程式人生 > >Spring的三種例項化Bean的方式

Spring的三種例項化Bean的方式

Spring提供了三種例項化Bean的方式。

  • 使用類構造器例項化。

    <bean id="personService" class="cn.itcast.service.impl.PersonServiceBean"></bean>

    不難看出,我們以前使用的就是該方式。上面的配置預設使用的是PersonServiceBean類的預設建構函式來例項化PersonServiceBean物件的。

  • 使用靜態工廠方法例項化。
    我們在編碼剖析Spring管理Bean的原理案例的基礎上使用這種方式來例項化bean。
    首先我們要在cn.itcast.service.impl包中建立一個工廠類——PersonServiceBeanFactory.java,其程式碼如下:

    public class PersonServiceBeanFactory {
        public static PersonServiceBean createPersonServiceBean() {
            return new PersonServiceBean();
        }
    }

    然後修改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 http://www.springframework.org/schema/beans/spring-beans.xsd">
    <bean id="personService" class="cn.itcast.service.impl.PersonServiceBean"></bean> <bean id="personService2" class=" cn.itcast.service.impl.PersonServiceBeanFactory"
    factory-method="createPersonServiceBean" />
    </beans>

    最後,將SpringTest類的改為:

    public class SpringTest {
    
        @Test
        public void test() {
            // ApplicationContext是介面
            ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml"); // 例項化Spring容器
            PersonService personService = (PersonService) ctx.getBean("personService2"); // 從Spring容器取得bean
            personService.save();
        }
    
    }

    測試test()方法,Eclipse控制檯列印如下:
    這裡寫圖片描述

  • 使用例項工廠方法例項化。
    我們同樣在編碼剖析Spring管理Bean的原理案例的基礎上使用這種方式來例項化bean。
    首先我們要修改工廠類——PersonServiceBeanFactory.java的程式碼為:

    public class PersonServiceBeanFactory {
        public static PersonServiceBean createPersonServiceBean() {
            return new PersonServiceBean();
        }
    
        public PersonServiceBean createPersonServiceBean2() {
            return new PersonServiceBean();
        }
    }

    緊接著修改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
            http://www.springframework.org/schema/beans/spring-beans.xsd">
    
        <bean id="personService" class="cn.itcast.service.impl.PersonServiceBean"></bean>
        <bean id="personService2" class=" cn.itcast.service.impl.PersonServiceBeanFactory"
              factory-method="createPersonServiceBean" />
        <bean id="personServiceBeanFactory" class="cn.itcast.service.impl.PersonServiceBeanFactory"></bean>
        <bean id="personService3" factory-bean="personServiceBeanFactory" factory-method="createPersonServiceBean2"></bean>
    </beans>

    最後,將SpringTest類的改為:

    public class SpringTest {
    
        @Test
        public void test() {
            // ApplicationContext是介面
            ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml"); // 例項化Spring容器
            PersonService personService = (PersonService) ctx.getBean("personService3"); // 從Spring容器取得bean
            personService.save();
        }
    
    }

    測試test()方法,Eclipse控制檯列印如下:
    這裡寫圖片描述

Spring提供了三種例項化Bean的方式,那麼到底該使用哪種方式較穩妥呢?應根據實際情況決定,但可這樣說,90%的可能都是採用第一種方式,即使用類構造器例項化bean。原始碼可點選進行下載。