1. 程式人生 > >三.Spring4學習-----IOC (控制反轉)建立物件的三種方式

三.Spring4學習-----IOC (控制反轉)建立物件的三種方式

一.使用IOC來建立物件的三種方式

1.通過無參的構造方法創建出來

public class User {
	public User() {
		System.out.println("user的無參構造方法");
	}
	private String name;
	public void setName(String name) {
		this.name = name;
	}
	public void show(){
		System.out.println("name="+name);
	}
}

2.通過有參的構造方法來建立物件
public class User {
	public User(String name) {
		super();
		this.name = name;
	}

	private String name;
	public void show(){
		System.out.println("name="+name);
	}
}

applicationContext.xml配置

3.通過·工廠方法來建立物件

a)靜態工廠

public class UserFactory {
	public static User newInstance(String name){
		return new User(name);
	}
}

applicationContext.xml配置
    <bean id="user" factory-bean="cn.sxt.factory.UserFactory" factory-method="newInstance">
    	<constructor-arg index="0" value="王五"/>
    </bean>

b)動態工廠
public class UserDynamicFactory {
	public User newInstance(String name){
		return new User(name);
	}
}

applicationContext.xml配置
    <bean id="userFacotry" class="cn.sxt.factory.UserDynamicFactory"/>
    <bean id="user" factory-bean="userFacotry" factory-method="newInstance">
    	<constructor-arg index="0" value="王五"/>
    </bean>


二.IOC和DI

1.IOC

       IOC(Inversion of Control):其思想是反轉資源獲取的方向. 傳統的資源查詢方式要求元件向容器發起請求查詢資源. 作為迴應, 容器適時的返回資源. 而應用了 IOC 之後, 則是容器主動地將資源推送給它所管理的元件, 元件所要做的僅是選擇一種合適的方式來接受資源. 這種行為也被稱為查詢的被動形式

2.DI

    DI(Dependency Injection) — IOC 的另一種表述方式:即元件以一些預先定義好的方式(例如: setter 方法)接受來自如容器的資源注入. 相對於 IOC 而言,這種表述更直接

3.IOC前生

需求:生成HTML或PDF格式的不同型別的報表

下圖表示當我們需要生成時,自動去呼叫對應的類的方法,生成對應報表

採用工廠設計模式


採用控制反轉

三.配置檔案詳解

1.alias:為bean設定別名,可以設定多個別名

 <!-- 設定別名 -->
    <alias name="user" alias="user1"/>
2.bean的設定
   <!-- bean就是java物件  由spring來建立和管理 -->    
   
   <!-- id是bean的識別符號 要唯一  如果沒有配置id,name預設識別符號 
   		如果配置id,又配置了name 那麼name是別名
   		name可以設定多個別名 分隔符可以 是 空格 逗號 分號
   		class是bean的全限定名=包名+類名
   		如果不配置 id,和name 那麼可以根據applicationContext.getBean(Class) 獲取物件
   -->
   <bean id="h1" name="hello h2,h3;h4" class="cn.sxt.bean.Hello">
   	<property name="name" value="張三"/>
   </bean>

3.為方便團隊協作開發,可以通過import來實現
<import resource="config/spring/entity.xml"/>

四.Spring容器

      在 Spring IOC 容器讀取 Bean 配置建立 Bean 例項之前, 必須對它進行例項化. 只有在容器例項化後, 才可以從 IOC 容器裡獲取 Bean 例項並使用.

1.Spring 提供了兩種型別的 IOC 容器實現.

      BeanFactory: IOC 容器的基本實現.
      ApplicationContext: 提供了更多的高階特性. 是 BeanFactory 的子介面.
      BeanFactory 是 Spring 框架的基礎設施,面向 Spring 本身;ApplicationContext 面向使用 Spring 框架的開發者,幾乎所有的應用場合都直接使用 ApplicationContext 而非底層的 BeanFactory
      無論使用何種方式, 配置檔案時相同的.


2.ApplicationContext

      ApplicationContext 的主要實現類:
             ClassPathXmlApplicationContext:從 類路徑下載入配置檔案
             FileSystemXmlApplicationContext: 從檔案系統中載入配置檔案

      ConfigurableApplicationContext 擴充套件於 ApplicationContext,新增加兩個主要方法:refresh() 和 close(), 讓 ApplicationContext 具有啟動、重新整理和關閉上下文的能力
      ApplicationContext 在初始化上下文時就例項化所有單例的 Bean
      WebApplicationContext 是專門為 WEB 應用而準備的,它允許從相對於 WEB 根目錄的路徑中完成初始化工作