創建對象的三種方式:
1、採用默認的構造函數創建
2、採用靜態工廠方法
1、寫一個靜態工廠方法類
public class HelloWorldFactory {
public static HelloWorld getInstance(){
return new HelloWorld();
}
}
2、在spring的配置文件中進行聲明
<bean id="helloWorld2" class="com.itheima05.spring.bean.HelloWorldFactory"
factory-method="getInstance"></bean>
告訴spring容器利用HelloWorldFactory類中的getInsatance靜態方法產生對象
但是具體的對象的創建的過程是由程序員來完成的
3、實例工廠方法
1、寫一個實例工廠類
public class HelloWorldFactory {
public HelloWorld getInstance(){
return new HelloWorld();
}
}
2、在spring的配置文件中
1、<bean id="helloWorld3" class="com.itheima05.spring.bean.HelloWorldFactory2"></bean>
spring容器爲HelloWorldFactory2創建對象
2、<bean id="helloWorldFactory" factory-bean="helloWorld3" factory-method="getInstance"></bean>
告訴spring容器,利用helloWorld3對象調用getInstance方法
創建對象的時機
1、在默認的情況下,在spring容器啓動的時候創建對象
在spring配置文件中,只要根據以上的三種方式的其中一種配置了,spring容器就會創建對象
好處:spring容器和web容器整合的時候,當web容器啓動的時候就可以初始化spring容器了,如果這個時候
spring容器內部有錯誤,則直接會報錯
如果該bean中存放着大量的數據,而且數據的初始化發生在創建對象的時候,這個時候,數據會過早的駐留在內存中
2、如果在spring的配置文件中一個bean的配置中有lazy-init="true",那麼該bean在調用getBean方法時創建對象
不好處:不能過早的發現錯誤
好處:按照需求加載數據(什麼時候要什麼時候加載)