二、Spring IOC 依賴注入
一、什麼是IOC?什麼是DI?
IOC 全稱指的是 Inverse Of Control 控制反轉。
原來我們使用Spring之前物件都是通過程式碼 new 物件()來自己進行建立。
現在使用了Spring之後。只需要把物件建立交給spring進行配置,那麼spring就會幫我們new出物件來。
DI 指的是Dependency Injection 。是依賴注入的意思,在我們建立物件的過程中,把物件依賴的屬性注入到我們的類中。
只需要配置就可以把依賴的物件的值注入到引用中。
關係:依賴注入不能單獨存在,需要在ioc基礎之上完成操作
DI(依賴注入)
一個物件需要另外一個物件時,無需在程式碼中建立被呼叫者,而是依賴於外部容器,由外部容器建立後傳遞給程式。
二、Spring的ioc操作
1.把物件的建立交給spring進行管理
2.IOC操作主要有兩種方式實現:
(1)IOC的配置檔案方式
(2)IOC的註解方式
3.IOC底層原理主要使用到技術:
a.xml配置檔案;
b.dom4j解決xml;
c.工廠設計模式;
d.反射。
工廠模式解耦合:
IOC原理解耦合:
4. IOC入門案例
第一步 匯入jar包
(1)解壓資料zip檔案
Jar特點:都有三個jar包
(2)做spring最基本功能時候,匯入四個核心的jar包就可以了,另外兩個是日誌的
commons-logging-1.2.jar
log4j-1.2.16.jar
(3)匯入支援日誌輸出的jar包
第二步 建立類,在類裡面建立方法
public class User {
public void add(){
System.out.println("Add~~~~~~~~~~~");
}
public static void main(String[] args) {
//原始做法
User user = new User();
user.add();
}
}
第三步 建立spring配置檔案,配置建立類
(1)spring核心配置檔名稱和位置不是固定的
- 建議放到src下面,官方建議applicationContext.xml
(2)引入schema約束(spring在啟動的時候需要驗證xml文件,約束的作用就是來驗證配置檔案的xml文件語法的正確性)
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
(3)配置物件建立
<bean id = "user" class="com.taiping.dto.UserDto"></bean>
第四步 寫程式碼測試物件建立
(1)這段程式碼在測試中使用
//載入spring配置檔案,根據建立物件
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
//2.得到配置建立的物件
User user = (User) applicationContext.getBean("user");
User.add();
5.配置檔案沒有提示問題
1 spring引入schema約束,把約束檔案引入到eclipse中
(1)複製約束路徑
http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
三、Spring整合web專案原理
1 載入spring核心配置檔案,
* new物件,功能可以實現,效率很低
2 實現思想:把載入配置檔案和建立物件過程,在伺服器啟動時候完成
3 實現原理
(1)ServletContext物件
(2)監聽器
(3)具體使用:
- 在伺服器啟動時候,為每個專案建立一個ServletContext物件
- 在ServletContext物件建立時候,使用監聽器可以具體到ServletContext物件在什麼時候建立
- 使用監聽器監聽到ServletContext物件建立時候,
-- 載入spring配置檔案,把配置檔案配置物件建立
-- 把創建出來的物件放到ServletContext域物件裡面(setAttribute方法)
- 獲取物件時候,到ServletContext域得到 (getAttribute方法)
spring約束: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">