bean的三種例項化方式(基於配置檔案XML)
阿新 • • 發佈:2019-01-09
在講訴bean的例項化方式之前,先了解下Spring框架的核心api:
BeanFactory:這是一個工廠,用於生成任意的bean。採取延遲載入,第一次getBean的時候才會初始化Bean。
ApplicationContext:是BeanFactory的子介面,功能更強大。(國際化處理、事件傳遞、Bean自動裝配、各種不同應用層的Context的實現)。當配置檔案被載入時,就進行物件例項化。
ClassPathXmlApplicationContext:用於載入classpath(類路徑、src)下的xml。
FileSystemXmlApplicationContext:用於載入指定碟符下的xml
下面開始講解bean的三種例項化方式:預設構造、靜態工廠、例項工廠。
第一種:預設構造
<bean id="" class=""> 必須提供預設構造
第二種:靜態工廠
靜態工廠:用於生成例項物件,所有的方法必須是static
<bean id="" class="工廠全限定類名" factory-method="靜態方法">
工廠:
public class MyBeanFactory { //建立例項 public static UserService createService(){ return new UserServiceImpl(); } }
Spring配置檔案:
<!-- 將靜態工廠建立的例項交予spring
class 確定靜態工廠全限定類名
factory-method 確定靜態方法名
-->
<bean id="userServiceId" class="com.zju.static_factory.MyBeanFactory" factory-method="createService"></bean>
第三種:例項工廠
例項工廠:必須先有工廠例項物件,通過例項物件再建立物件。提供所有的方法都是“非靜態”的。
//例項工廠,所有的方法都是非靜態的 public class MyBeanFactory { //建立例項 public UserService createService(){ return new UserServiceImpl(); } }
Spring配置檔案:
<!-- 建立工廠例項 -->
<bean id="myBeanFactoryId" class="com.zju.factory.MyBeanFactory"></bean>
<!-- 獲得userservice
* factory-bean 確定工廠例項
* factory-method 確定普通方法
-->
<bean id="userServiceId" factory-bean="myBeanFactoryId" factory-method="createService"></bean>