0912spring-基於XML的IOC配置
1)applicationContext的三個常用實現類及由接口引發的問題
2)創建Bean的三種方式
<!-- 第一種方式:使用默認構造函數創建。
在spring的配置文件中使用bean標籤,配以id和class屬性之後,且沒有其他屬性和標籤時。
採用的就是默認構造函數創建bean對象,此時如果類中沒有默認構造函數,則對象無法創建。
<bean id="accountService" class="com.itheima.service.impl.AccountServiceImpl"></bean>
-->
<!-- 第二種方式: 使用普通工廠中的方法創建對象(使用某個類中的方法創建對象,並存入spring容器)
<bean id="instanceFactory" class="com.itheima.factory.InstanceFactory"></bean>
<bean id="accountService" factory-bean="instanceFactory" factory-method="getAccountService"></bean>
-->
<!-- 第三種方式:使用工廠中的靜態方法創建對象(使用某個類中的靜態方法創建對象,並存入spring容器)
<bean id="accountService" class="com.itheima.factory.StaticFactory" factory-method="getAccountService"></bean>
-->
<!-- bean的作用範圍調整
bean標籤的scope屬性:
作用:用於指定bean的作用範圍
取值: 常用的就是單例的和多例的
singleton:單例的(默認值)
prototype:多例的
request:作用於web應用的請求範圍
session:作用於web應用的會話範圍
global-session:作用於集羣環境的會話範圍(全局會話範圍),當不是集羣環境時,它就是session
<bean id="accountService" class="com.itheima.service.impl.AccountServiceImpl" scope="prototype"></bean>
-->
## 3)bean對象的作用範圍和生命週期
```java
<!-- bean的作用範圍調整
bean標籤的scope屬性:
作用:用於指定bean的作用範圍
取值: 常用的就是單例的和多例的
singleton:單例的(默認值)
prototype:多例的
request:作用於web應用的請求範圍
session:作用於web應用的會話範圍
global-session:作用於集羣環境的會話範圍(全局會話範圍),當不是集羣環境時,它就是session
<bean id="accountService" class="com.itheima.service.impl.AccountServiceImpl" scope="prototype"></bean>
-->
<!-- bean對象的生命週期
單例對象
出生:當容器創建時對象出生
活着:只要容器還在,對象一直活着
死亡:容器銷燬,對象消亡
總結:單例對象的生命週期和容器相同
多例對象
出生:當我們使用對象時spring框架爲我們創建
活着:對象只要是在使用過程中就一直活着。
死亡:當對象長時間不用,且沒有別的對象引用時,由Java的垃圾回收器回收
-->
3)bean對象的作用範圍和生命週期
<!-- bean的作用範圍調整
bean標籤的scope屬性:
作用:用於指定bean的作用範圍
取值: 常用的就是單例的和多例的
singleton:單例的(默認值)
prototype:多例的
request:作用於web應用的請求範圍
session:作用於web應用的會話範圍
global-session:作用於集羣環境的會話範圍(全局會話範圍),當不是集羣環境時,它就是session
<bean id="accountService" class="com.itheima.service.impl.AccountServiceImpl" scope="prototype"></bean>
-->
<!-- bean對象的生命週期
單例對象
出生:當容器創建時對象出生
活着:只要容器還在,對象一直活着
死亡:容器銷燬,對象消亡
總結:單例對象的生命週期和容器相同
多例對象
出生:當我們使用對象時spring框架爲我們創建
活着:對象只要是在使用過程中就一直活着。
死亡:當對象長時間不用,且沒有別的對象引用時,由Java的垃圾回收器回收
-->
4)spring的依賴注入
<!-- spring中的依賴注入
依賴注入:
Dependency Injection
IOC的作用:
降低程序間的耦合(依賴關係)
依賴關係的管理:
以後都交給spring來維護
在當前類需要用到其他類的對象,由spring爲我們提供,我們只需要在配置文件中說明
依賴關係的維護:
就稱之爲依賴注入。
依賴注入:
能注入的數據:有三類
基本類型和String
其他bean類型(在配置文件中或者註解配置過的bean)
複雜類型/集合類型
注入的方式:有三種
第一種:使用構造函數提供
第二種:使用set方法提供
第三種:使用註解提供(明天的內容)
-->
<!--構造函數注入:
使用的標籤:constructor-arg
標籤出現的位置:bean標籤的內部
標籤中的屬性
type:用於指定要注入的數據的數據類型,該數據類型也是構造函數中某個或某些參數的類型
index:用於指定要注入的數據給構造函數中指定索引位置的參數賦值。索引的位置是從0開始
name:用於指定給構造函數中指定名稱的參數賦值 常用的
~~~~~~以上三個用於指定給構造函數中哪個參數賦值~~~~~~
value:用於提供基本類型和String類型的數據
ref:用於指定其他的bean類型數據。它指的就是在spring的Ioc核心容器中出現過的bean對象
優勢:
在獲取bean對象時,注入數據是必須的操作,否則對象無法創建成功。
弊端:
改變了bean對象的實例化方式,使我們在創建對象時,如果用不到這些數據,也必須提供。
-->
<!-- set方法注入 更常用的方式
涉及的標籤:property
出現的位置:bean標籤的內部
標籤的屬性
name:用於指定注入時所調用的set方法名稱
value:用於提供基本類型和String類型的數據
ref:用於指定其他的bean類型數據。它指的就是在spring的Ioc核心容器中出現過的bean對象
優勢:
創建對象時沒有明確的限制,可以直接使用默認構造函數
弊端:
如果有某個成員必須有值,則獲取對象是有可能set方法沒有執行。
-->
<!-- 複雜類型的注入/集合類型的注入
用於給List結構集合注入的標籤:
list array set
用於個Map結構集合注入的標籤:
map props
結構相同,標籤可以互換
-->