IOC Spring 最核心的模塊
DAO Spring 對訪問數據庫的支持 主要封裝的是JDBC
MVC Spring 對 MVC 設計模式的支持 (SSM)
AOP (Aspect Orientied Programing)面向切面編程
ORM 對象關係映射 Spring 要和ORM框架結合 Mybatis
2.什麼是IOC
Inversion Of Control 控制反轉
程序的開發 由原來的 需要某個對象時 由原來的new的方式去 變成了由 容器來提供對象
就是把對象的控制權交給容器。 容器來負責對象的創建 和 注入。這樣做可以降低對象之間的
耦合度。
IOC的底層由Spring 容器來完成,容器的作用是 負責組件對象的創建 和 對象關係維護。
3.Spring 容器
Spring 容器 是用來管理 java bean 組件
Spring 容器 實現了 IOC 和 AOP
Spring 容器 對應的類型 ApplicationContext 和 BeanFactory
4.Spring 容器使用的步驟
4.1 建立一個項目 導入spring 的 ioc 相關 jar包 到項目
4.2 拷貝Spring 容器對應的配置文件 到 src下
4.3 在Spring 配置文件中 配置 java 類
<bean id="bean組件標識" class="包名+類名" />
4.4 構建Spring 容器對象 加載上面的配置文件通過Spring容器獲取對象
5.使用上面的spring 容器的使用步驟 獲取一個Emp 類型的對象
這個Emp 類型 需要自定義 字段有 name age salary
方法有 show toString 構造 。
通過容器 來獲取Emp 類型的對象
4.1 考慮 導入spring ioc 相關jar包 和 spring 的配置文件
4.2 寫一個Emp 類 提供成員變量 get set方法 構造 toString show
4.3 在Spring 配置文件 配置 Emp 類型
<bean id="bean組件標識" class="包名+類名" />
4.4 構建Spring 容器對象 加載上面的配置文件 通過Spring容器獲取對象
ApplicationContext app = new ClassPathXmlApplicationContext("文件");
app.getBean("配置文件中的標識",類型.class);
6.Spring 容器創建bean對象的三種方式
6.1 使用構造方法來創建對象 默認調用無參構造
<bean id="" class="構建的對象對應的包名+類名" > </bean>
6.2 使用靜態工廠方法
<bean id="對象標識" class="工廠的包名+類名" factory-method="靜態方法名"> </bean>
6.3 使用實例化工廠方法
<bean id="對象標識" class="目標對象的包名+類名" factory-bean="工廠對象的標識"
factory-method="實例化方法名"> </bean>
(使用日曆對象 來獲取日期對象 )
<!-- 使用靜態工廠方式 獲取日曆對象 -->
<bean id="cal" class="java.util.Calendar" factory-method="getInstance"></bean>
<!-- 使用實例化工廠方式 使用 日曆對象獲取日期對象 -->
<bean id="date" class="java.util.Date" factory-bean="cal" factory-method="getTime"></bean>
作用域的指定 使用 bean 標籤中的 scope 來指定
scope="singleton" 這是spring 容器 默認對一個組件進行的處理
scope="prototype" 非單例的
request session 等這些作用域 在web中使用
8.對象的初始化問題 (6)
Spring 容器創建完對象之後 可以對對象進行初始化
第一種手段 是 在beans 標籤中 加 default-init-method 指定初始化方法的名字 這樣
針對所有的bean 對象 都起作用,影響的範圍比較大 所有某個類型中沒有對應的初始化方法
時程序不會報錯。
第二種手段 在bean 標籤中 加 init-method 指定的方法名 只針對加了init-method 的
bean 影響範圍比較小 所以沒有對應的初始化的方法則會報錯。
9.對象的銷燬問題 (6)
第一種手段 是 在beans 標籤中 加 default-destroy-method 指定銷燬方法的名字 這樣
針對所有的bean 對象 都起作用,影響的範圍比較大 所有某個類型中沒有對應的初始化方法
時程序不會報錯。
第二種手段 在bean 標籤中 加 destroy-method 指定的方法名 只針對加了destroy-method 的
bean 影響範圍比較小 所以沒有對應的銷燬的方法則會報錯。
多例模式下 銷燬方法的輸出不再表現
10.bean 對象的延遲實例化
bean對象 默認是單例的 在這種作用域下 在Spring 容器啓動時就會創建對象,可以通過設置
對對象進行延遲實例化。可以在 beans 標籤中 加 default-lazy-init 這個使用比較少
也可以在 bean標籤中 加 lazy-init="true"
11.什麼是DI
Dependence Injection 依賴注入 解決組件的裝配問題
DI 其實是對IOC (控制反轉) 的一種具體實現手段
12.DI的實現方式
12.1 setter 注入
基於set方法的注入
<bean id="player" class="com.xdl.bean.Player">
<property name="name" value="小馬哥"></property>
<property name="age" value="38"></property>
<property name="money" value="1000000000"></property>
<property name="card" ref="card1"></property>
</bean>
12.2 構造器注入
按照參數的位置 來指定對應的構造方法的參數值
<!-- 創建一個玩家 名字是王詩齡 45 1 -->
<bean id="xiaohua" class="com.xdl.bean.Player">
<constructor-arg index="0" value="王詩齡"></constructor-arg>
<constructor-arg index="1" value="8"></constructor-arg>
<constructor-arg index="2" value="111" ></constructor-arg>
<constructor-arg index="3" ref="card1"></constructor-arg>
</bean>