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