三.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 根目錄的路徑中完成初始化工作



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章