Spring的三種例項化Bean的方式
阿新 • • 發佈:2019-01-10
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"
最後,將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。原始碼可點選進行下載。