Spring_day02

:構造方法注入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.在使用構造方法進行注入的時候。配置文件中的構造參數。必須和實體類中的構造參數匹配。若是不匹配則報錯對象

 

 

SpringIOCDI的意義:繼承

1.若是在架構中webservicedao 應該儘量的保持鬆耦合。若是各層之間緊耦合對於後期代碼的維護,至關困難。

 

2.Spring能夠經過配置文件的形式。動態的實現鬆耦合。若是未來具體的實現類發生了改變。只須要修改配置文件便可。無需手動修改代碼。提升 了代碼的開發效率和維護效率。而且其中全部的注入都是面向接口的,這樣作能最大程度保證代碼的靈活性。

 

Parent屬性

parent="baseDao"

說明:Spring容器在建立對象的時候會根據bean的個數來建立對象。但是若是沒有指明parent屬性。指明子父級關係。那麼Spring容器在建立對象的時候就不會自動的維護。因此在bean中若是有子父級關係。須要經過parent標籤來指明。

2parent屬性的使用場景:

對於架構層級而言。經過一些基礎類,使用接口或父類繼承的形式來達到簡化代碼的目的。可使用parent屬性

 

 

 

:自動的裝配過程

若是類中的屬性是引用類型,而且配置文件中有相應bean的配置。則能進行自動的裝配。(自動的注入)

1autowire

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注入的原理

首先會根據屬性的名稱找對應的beanID,若是能正確匹配則正確注入。若是匹配不成功,則去找對應的class形式,經過class與bean中的class匹配。若是匹配則注入。不然匹配不成功,則報錯

2.@Resource

用法和@Autowired如出一轍,@Resource(name="Bean的ID")

一旦指明beanID,那麼就會嚴格按照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>

要指明mapID 這個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爲了知足分層的須要 發明了三個註解 分別代碼不一樣的層級

相關文章
相關標籤/搜索