在spring中有三中實例化bean的方式:
一、使用構造器實例化;(90%通常使用的一個方法)
二、使用靜態工廠方法實例化;
三、使用實例化工廠方法實例化。
每種實例化所采用的配置是不一樣的:
一、使用構造器實例化;
這種實例化的方式可能在我們平時的開發中用到的是最多的,因為在xml文件中配置簡單並且也不需要額外的工廠類來實現。
- <!--applicationContext.xml配置:-->
- <bean id="personService" class="cn.mytest.service.impl.PersonServiceBean"></bean>
id是對象的名稱,class是要實例化的類,然后再通過正常的方式進調用實例化的類即可,比如:
- public void instanceSpring(){
- //加載spring配置文件
- ApplicationContext ac = new ClassPathXmlApplicationContext(
- new String[]{
- "/conf/applicationContext.xml"
- });
- //調用getBean方法取得被實例化的對象。
- PersonServiceBean psb = (PersonServiceBean) ac.getBean("personService");
- psb.save();
- }
采用這種實例化方式要注意的是:要實例化的類中如果有構造器的話,一定要有一個無參的構造器。
二、使用靜態工廠方法實例化;
根據這個中實例化方法的名稱就可以知道要想通過這種方式進行實例化就要具備兩個條件:(一)、要有工廠類及其工廠方法;(二)、工廠方法是靜態的。OK,知道這兩點就好辦了,首先創建工程類及其靜態方法:
- package cn.mytest.service.impl;
- /**
- *創建工廠類
- *
- */
- public class PersonServiceFactory {
- //創建靜態方法
- public static PersonServiceBean createPersonServiceBean(){
- //返回實例化的類的對象
- return new PersonServiceBean();
- }
- }
然后再去配置spring配置文件,配置的方法和上面有點不同,這里也是關鍵所在
- <!--applicationContext.xml配置:-->
- <bean id="personService1" class="cn.mytest.service.impl.PersonServiceFactory" factory-method="createPersonServiceBean"></bean>
id是實例化的對象的名稱,class是工廠類,也就實現實例化類的靜態方法所屬的類,factory-method是實現實例化類的靜態方法。
然后按照正常的調用方法去調用即可:
- public void instanceSpring(){
- //加載spring配置文件
- ApplicationContext ac = new ClassPathXmlApplicationContext(
- new String[]{
- "/conf/applicationContext.xml"
- });
- //調用getBean方法取得被實例化的對象。
- PersonServiceBean psb = (PersonServiceBean) ac.getBean("personService1");
- psb.save();
- }
三、使用實例化工廠方法實例化。
這個方法和上面的方法不同之處在與使用該實例化方式工廠方法不需要是靜態的,但是在spring的配置文件中需要配置更多的內容,,首先創建工廠類及工廠方法:
- package cn.mytest.service.impl;
- /**
- *創建工廠類
- *
- */
- public class PersonServiceFactory {
- //創建靜態方法
- public PersonServiceBean createPersonServiceBean1(){
- //返回實例化的類的對象
- return new PersonServiceBean();
- }
- }
然后再去配置spring配置文件,配置的方法和上面有點不同,這里也是關鍵所在
- <!--applicationContext.xml配置:-->
- <bean id="personServiceFactory" class="cn.mytest.service.impl.PersonServiceFactory"></bean>
- <bean id="personService2" factory-bean="personServiceFactory" factory-method="createPersonServiceBean1"></bean>
這里需要配置兩個bean,第一個bean使用的構造器方法實例化工廠類,第二個bean中的id是實例化對象的名稱,factory-bean對應的被實例化的工廠類的對象名稱,也就是第一個bean的id,factory-method是非靜態工廠方法。
然后按照正常的調用方法去調用即可:
- public void instanceSpring(){
- //加載spring配置文件
- ApplicationContext ac = new ClassPathXmlApplicationContext(
- new String[]{
- "/conf/applicationContext.xml"
- });
- //調用getBean方法取得被實例化的對象。
- PersonServiceBean psb = (PersonServiceBean) ac.getBean("personService2");
- psb.save();
- }