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