在面向對象程序中,如要使用某個對象,就需要先實例化這個對象。同樣的,在Spring中,要想使用容器中的Bean,也需要實例化Bean。實例化Bean有三種方式,分別是:構造器實例化、靜態工廠實例化、實例工廠方式實例化。
構造器實例化 : 構造器實例化是指Spring容器通過Bean對應類中默認的無參構造方法來實例化Bean。
(1)創建一個Bean1類
1 public class Bean1 { 2 public void say() { 3 System.out.println("Bean1 by Construtor !"); 4 } 5 }
(2)配置xml文件
1 <bean id="bean1" class="constructor.Bean1" />
(3)創建一個測試類測試是否能實例化Bean1
1 public class Test1 { 2 3 public static void main(String[] args) { 4 // TODO Auto-generated method stub 5 ClassPathXmlApplicationContext context = 6 new ClassPathXmlApplicationContext("applicationContext.xml"); 7 Bean1 bean1 = (Bean1)context.getBean("bean1"); 8 bean1.say(); 9 context.close(); 10 } 11 12 }
靜態工廠方式實例化
(1)創建一個Bean2類
1 public class Bean2 { 2 public void say() { 3 System.out.println("Bean2 by StaticFactory !"); 4 } 5 }
(2)創建一個MyBean2Factory類,並創建一個靜態方法createBean()來返回Bean2實例
1 public class MyBean2Factory { 2 public static Bean2 createBean() { 3 return new Bean2(); 4 } 5 }
(3)配置XML文件
1 <bean id="bean2" class="static_factory.MyBean2Factory" factory-method="createBean" />
實例工廠方式實例化
(1)創建一個Bean3類
1 public class Bean3 { 2 public void say() { 3 System.out.println("Bean3 by Factory !"); 4 } 5 }
(2)創建一個MyBean3Factory類,並創建一個靜態方法createBean()來返回Bean2實例
1 public class MyBean3Factory { 2 public Bean3 createBean() { 3 return new Bean3(); 4 } 5 }
(3)配置XML文件
1 <!-- 配置工廠 --> 2 <bean id="myBean3Factory" class="factory.MyBean3Factory" /> 3 <!-- 使用factory-bean 屬性指向配置的實例工廠 --> 4 <bean id="bean3" factory-bean="myBean3Factory" factory-method="createBean"/>
三種實例化方式的區別
構造器實例化:通過無參構造的方法實例化Bean,其實質是將Bean對應的類交給Spring自帶的工廠(BeanFactory)管理,由Spring自帶的工廠模式幫我們創建和維護這個類
靜態工廠方式實例化:通過靜態工廠創建並返回Bean。其實質是將Bean對應的類交給我們自己的靜態工廠管理。Spring只是幫我們調用了靜態工廠創建實例的方法。運用:很多時候我們在使用第三方jar包提供給我們的類時,由於這個類沒有構造方法,是通過第三方包提供的靜態工廠創建的,如果我們想把第三方jar包里面的這個類交由Spring來管理的話,就可以使用Spring提供的靜態工廠創建實例的配置。
實例工廠方式實例化:通過實例工廠創建並返回Bean,其實質就是把創建實例的工廠類和調用工廠類的方法創建實例的方法的過程也交由Spring管理,創建實例的這個過程也是由我們自己配置的實例工廠內部實現的。運用:如Spring整合Hibernate就是通過這種方式實現的。但對於沒有與Spring整合過的工廠類,我們一般都是自己用代碼來管理的。