:構造方法注入web
index="參數的位置 從0開始"spring
name="參數的名稱"安全
ref="對象的引用" value="具體的賦值" 兩者不能同時出現架構
<constructor-arg index="0" name="name" value="TOM貓"></constructor-arg>dom
說明:spa
1.經過構造方法爲屬性賦值時,可使用index 或者是name屬性爲屬性賦值。index的起始值爲0 ,name屬性就是參數的名稱。用的時候兩者取其一就行。不過一般狀況下使用Index最爲安全。component
ref是注入的引用類型。value注入的是具體數值,兩者不能共存取其一。xml
2.在使用構造方法進行注入的時候。配置文件中的構造參數。必須和實體類中的構造參數匹配。若是不匹配則報錯對象
:SpringIOC和DI的意義:繼承
1.若是在架構中web、service、dao 應該儘量的保持鬆耦合。若是各層之間緊耦合對於後期代碼的維護,至關困難。
2.Spring能夠經過配置文件的形式。動態的實現鬆耦合。若是未來具體的實現類發生了改變。只須要修改配置文件便可。無需手動修改代碼。提升 了代碼的開發效率和維護效率。而且其中全部的注入都是面向接口的,這樣作能最大程度保證代碼的靈活性。
:Parent屬性
parent="baseDao"
說明:Spring容器在建立對象的時候會根據bean的個數來建立對象。但是若是沒有指明parent屬性。指明子父級關係。那麼Spring容器在建立對象的時候就不會自動的維護。因此在bean中若是有子父級關係。須要經過parent標籤來指明。
2:parent屬性的使用場景:
對於架構層級而言。經過一些基礎類,使用接口或父類繼承的形式來達到簡化代碼的目的。可使用parent屬性
:自動的裝配過程
若是類中的屬性是引用類型,而且配置文件中有相應bean的配置。則能進行自動的裝配。(自動的注入)
1:autowire
1.1spring中能夠經過autowire屬性實現自動裝配。未來不須要手動的在寫property可以節省代碼。
1.2使用裝配過程必須添加set方法。不然裝配失敗 對象屬性爲null
2.裝配的原理
2.1autowire="byName"
使用spring在進行裝配的時候會先檢查全部的set方法
setStudent====>student======>拿到student之後會根據bean中的ID進行匹配。若是匹配成功則能正確的注入。若是匹配不成功則爲null。
2.2autowire="byType"
使用spring在進行裝配的時候會先檢查全部的set方法
setStudent====>student===>拿到對應的Class形式====>根據bean中的class類型進行匹配。若是匹配成功則能正確注入。
:Spring的屬性註解
Spring爲咱們提供了屬性註解的方式,可以簡化開發。
1.@Autowired注入的原理
首先會根據屬性的名稱找對應的bean的ID,若是能正確匹配則正確注入。若是匹配不成功,則去找對應的class形式,經過class與bean中的class匹配。若是匹配則注入。不然匹配不成功,則報錯。
2.@Resource
用法和@Autowired如出一轍,@Resource(name="Bean的ID")
一旦指明bean的ID,那麼就會嚴格按照bean的ID去查找。不會再根據屬性的ID和類型查找。
3.@Autowired和@Qualifier(value="s1")一塊兒使用的效果和@Resource(name="ID")效果相同。
一般狀況下 咱們使用@Resource註解
:類的註解
1.開啓類掃描
<context:component-scan base-package="domain"/>
說明:開啓類掃描之後會自動的掃描給定的包及其子包,若是是多個包之間用「,」號隔開
2:@Component註解使用的原理
1.首先Spring在進行xml解析時 會解析包掃描的標籤。根據標籤指定的包進行掃描。而後會到指定的包下查找那些類上有@Component註解,找到相應的註解後,會給這個類建立一個對象,建立好對象以後存入MAP中,會根據類的名稱生成相應的ID(首字母小寫其餘不變)。
看成KEY存入map中。
2.ID生成的原則
若是第二個字母是大寫的 ABcc ==> 轉化之後的ID就是ABcc
若是第二個字母小寫 Abcc====>轉化之後ID就是abcc
3:@Value註解
@Value註解能夠注入字符串和基本類型只須要將注入的值寫到
@Value(value="張三")便可。就能完成注入。
若是屬性值只有value那麼value能夠省略不寫。
3.1複雜類型的注入
父類類型的注入須要引入一個util這樣的標籤
<util:map id="map">
<entry key="1" value="一"></entry>
<entry key="2" value="TOM貓"></entry>
<entry key="3" value="Jerry老鼠"></entry>
</util:map>
要指明map的ID 這個ID就是經過@Value("#{@ID}") ID應該保持一致。
4:動態數據注入---引入外部配置文件
<context:property-placeholder location="classpath:/tom.properties"/>
原理說明:
spring進行解析的時候會根據指定的路徑掃描對應的配置文件,掃描完成之後將配置文件的鍵值對進行保存。保存到spring容器中。須要使用的時候經過@Value("${key}")來獲取相應的value值,實現了動態的注入效果。
5:類掃描的包容性
在開啓類掃描的時候,會默認的開啓屬性註解。因此屬性註解能夠省略。
6:類的註解指明ID
@Component(value="TomDao")
說明:使用這個註解的時候默認的條件下會根據類的名稱按照首字母小寫,自動的生成相應的Bean的ID
若是有value值 那麼就會按照value指定的名稱當作bean的ID
7:Spring的分層標識的註解
@Repository(value="TomDao") dao層
@Service("TomService") service層
@Controller 控制層
說明:Spring爲了知足分層的須要 發明了三個註解 分別代碼不一樣的層級