第15講依賴注入_第1頁(yè)
第15講依賴注入_第2頁(yè)
第15講依賴注入_第3頁(yè)
第15講依賴注入_第4頁(yè)
第15講依賴注入_第5頁(yè)
已閱讀5頁(yè),還剩41頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

企業(yè)級(jí)JAVAII

軟件工程系:聶常紅

cred_n@163.com內(nèi)容回顧:Spring概念Spring的配置文件作用、主要內(nèi)容、保存位置ApplicationContextSpringBean的作用域配置文件的加載第15講依賴注入15.1依賴注入概述15.2設(shè)值注入15.3構(gòu)造器注入15.4依賴關(guān)系配置15.5注解注入15.6自動(dòng)掃描機(jī)制15.7用注解對(duì)Bean進(jìn)行初始化和銷毀15.6手動(dòng)裝配和自動(dòng)裝配15.1依賴注入概述依賴注入,即IoC,指由容器創(chuàng)建的對(duì)象在運(yùn)行期,動(dòng)態(tài)地注入到應(yīng)用的組件中常用的依賴注入方式:設(shè)值(setter)注入構(gòu)造器注入注解注入15.2設(shè)值注入設(shè)值注入,通過(guò)屬性的Setter方法注入Bean的屬性值。優(yōu)點(diǎn):具有可選擇性,靈活性比較高語(yǔ)法:必須提供默認(rèn)的構(gòu)造函數(shù)必須為需要注入值的屬性提供對(duì)應(yīng)的Setter方法在配置文件中必須使用<property>配置屬性的注入值packagecom.sise.service.impl;publicclassPersonServiceBean{ privateStringname; privatePersonDaopersondao;

publicvoidsetName(Stringname){ =name; }

publicvoidsetPersonDao(PersonDaopersondao){ this.persondao=persondao; } ......}屬性注入示例:屬性注入配置:<beanid=“personDao”class=“com.sise.dao.impl.PersonDaoBean”/><beanid="personService"class="com.sise.service.impl.PersonServiceBean"><propertyname="name"value="AA"/><propertyname="persondao"ref="personDao"/></bean>15.3構(gòu)造器注入構(gòu)造器注入,通過(guò)構(gòu)造器的參數(shù)注入Bean的屬性值。優(yōu)點(diǎn):可以保證一些屬性在Bean實(shí)例化時(shí)得到設(shè)置,保證了Bean在實(shí)例化后即可使用。語(yǔ)法:必須提供帶參數(shù)的構(gòu)造函數(shù)在配置文件中必須使用<constructor-arg>配置構(gòu)造器參數(shù)的注入值packagecom.sise.spring.lesson2.bean;publicclassPersonBean{ privateStringname; privateintage;

publicPersonBean(Stringname,intage){ =name; this.age=age; } ......}構(gòu)造器注入示例:構(gòu)造器注入配置:<beanid="personBean"class="

com.sise.spring.lesson2.bean.PersonBean">

<constructor-argindex=“0”value=“AA”/><constructor-argindex=“1”value=“26”/></bean>構(gòu)造函數(shù)第一個(gè)參數(shù)的索引為0,第二個(gè)為1,以此類推構(gòu)造器注入?yún)?shù)匹配設(shè)置:Spring的配置文件采用和元素標(biāo)簽順序無(wú)關(guān)的策略。在配置文件中,<constructor-arg>標(biāo)簽和基本類型參數(shù)的對(duì)應(yīng)關(guān)系可通過(guò)標(biāo)簽的type和index屬性來(lái)決定JAVA反射機(jī)制可以獲取構(gòu)造函數(shù)參數(shù)的類型,所以當(dāng)Bean構(gòu)造函數(shù)中的參數(shù)的類型是彼此可辨別時(shí),也可不設(shè)置type和index構(gòu)造器注入配置:<beanid="personBean"class="com.sise.spring.lesson2.bean.PersonBean">

<constructor-argindex=“0”type=“java.lang.String”

value=“AA”/>

<constructor-argindex=“1”type=“int”

value=“26”/></bean>

15.4依賴注入值的配置注入到Bean中的值可以包括以下幾種類型值:字面值其他Bean實(shí)例

集合類型對(duì)象1.注入字面值:“字面值”通常指基本數(shù)據(jù)類型及其封裝類以及String等類型的值,這些值可通過(guò)<property>或<constructor-arg>的value屬性進(jìn)行設(shè)置。注入配置:<beanid="personService“class="com.sise.service.impl.PersonServiceBean"><propertyname=“age”value=“26”/><propertyname=“name”value=“張三”/></bean>2.注入其他Bean實(shí)例:注入其他Bean實(shí)例有三種方式:使用<property>或<constructor-arg>標(biāo)簽中的ref屬性引用使用<ref>子標(biāo)簽引用使用內(nèi)部Bean①使用<property>標(biāo)簽的ref屬性引用注入配置:<beanid="personService“class="com.sise.service.impl.PersonServiceBean"><propertyname=“personDao”ref=“personDao”/></bean><beanid="personDao"class="com.sise.dao.impl.PersonDaoBean“/>②使用<ref>子標(biāo)簽引用:在<property>中使用子標(biāo)簽<ref>可以引用IoC容器中定義的Bean。<ref>常使用以下兩個(gè)屬性來(lái)引用容器中的其他Bean:bean:用于引用同一個(gè)XML文件或不同XML文件中Bean的id或name屬性值。注意:當(dāng)引用不同XML的Bean時(shí)需要使用import引入其他配置文件到當(dāng)前XML文件local:用于引用同一XML文件中的Bean的id或name屬性值使用<ref>子標(biāo)簽引用示例:注入配置:<beanid="personService“class="com.sise.service.impl.PersonServiceBean"><propertyname="persondao">

<refbean="personDao"/><!--<reflocal="personDao"/>-->

</property></bean><beanid="personDao"class="com.sise.dao.impl.PersonDaoBean"/>③使用內(nèi)部bean如果一個(gè)bean只被某個(gè)bean引用,此時(shí)可使用內(nèi)部bean的方式進(jìn)行bean的注入,例如:注入配置:<beanid="personService"class="com.sise.service.impl.PersonServiceBean"><propertyname=“persondao”>

<bean

class=“com.sise.dao.impl.PersonDaoBean“/></property></bean>不需要設(shè)置id屬性,該bean只能被personService所引用,不能被其他bean引用注入字面值及Bean實(shí)例示例:①創(chuàng)建一個(gè)java項(xiàng)目②搭建Spring運(yùn)行環(huán)境(即對(duì)項(xiàng)目添加相應(yīng)的JAR文件)③創(chuàng)建一個(gè)Dao接口及其實(shí)現(xiàn)類④創(chuàng)建一個(gè)業(yè)務(wù)接口及其實(shí)現(xiàn)類⑤在src目錄下新建一個(gè)Spring的配置文件⑥創(chuàng)建測(cè)試類④創(chuàng)建Dao接口及其實(shí)現(xiàn)類:⑤創(chuàng)建業(yè)務(wù)接口:⑤創(chuàng)建業(yè)務(wù)類:⑥創(chuàng)建Spring配置文件:⑦創(chuàng)建測(cè)試類:3.注入集合類型對(duì)象:Spring為L(zhǎng)ist、Set、Map和Properties等集合類屬性的注入提供了專門的配置元素標(biāo)簽。注入集合類型對(duì)象示例:packagecom.sise.service.impl;publicclassPersonServiceBean{

privateSet

sets=newHashSet(); privateList

lists=newArrayList(); privateMapmaps=newHashMap(); privateProperties

properties=new

Properties(); //省略各屬性的setter方法}1)注入Set類型對(duì)象的配置:<beanid="personService“class="com.sise.service.impl.PersonServiceBean">

<propertyname="sets">

<set> <value>set1</value> <value>set2</value> <refbean=“myDataSource”> </set>

</property></bean>使用<set>和<value>或<ref>來(lái)配置Set類型對(duì)象2)注入List類型對(duì)象的配置:<beanid="personService“class="com.sise.service.PersonServiceBean">

<propertyname=“l(fā)ists"> <list>

<value>list1</value> <value>list2</value> <refbean=“myDataSource”>

</list> </property></bean>使用<list>和<value>或<ref>來(lái)配置List類型對(duì)象。3)注入Map類型對(duì)象的配置:<beanid="personService“class="com.sise.serv.PersonServiceBean">

<propertyname=“maps">

<map> <entrykey=“item1"value=“item1_value"/>

<entrykey=“item2"value=“item2_value"/><entrykey=“item3"value-ref="myDataSource"/></map></property></bean>使用<map>、<entry>來(lái)配置Map類型對(duì)象。4)注入Properties類型對(duì)象的配置<beanid="personService“class="com.sise.service.PersonServiceBean">

<propertyname=“properties"> <props> <propkey=“p1”>item1</prop> <propkey=“p2”>item2</prop></props> </property></bean>Properties類型是Map類型的特例:Map元素的鍵和值可以是任何類型,而Properties屬性的鍵和值只能是字符串。使用<props>和<prop>標(biāo)簽來(lái)配置注意:沒(méi)有<value>子標(biāo)簽15.5注解注入在java代碼中可以使用@Autowired或@Resource注解方式進(jìn)行依賴注入,此時(shí)需要在項(xiàng)目中添加spring-aop-4.2.3.RELEASE.jar以及在XML配置文件中添加以下配置信息:<beansxmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance"

xmlns:context="/schema/context"xsi:schemaLocation=/schema/beans/schema/beans/spring-beans-4.2.xsd

/schema/context/schema/context/spring-context-4.2.xsd”><context:annotation-config/>這個(gè)配置隱式注冊(cè)了多個(gè)對(duì)注解進(jìn)行解析處理的處理器,如:AutowiredAnnotationeanPostProcessor,CommonAnnotationPostProessor等@Resource注解存在JDK1.6中的javax.annotation包下@Autowired注解由Spring框架提供,與框架耦合緊密建議使用@Resource使用JAVAEE5或JDK1.6時(shí)添加該包@Autowired:默認(rèn)按類型裝配@Resource:默認(rèn)按字段名稱或?qū)傩悦Q裝配,當(dāng)找不到與名稱匹配的bean時(shí)才會(huì)按類型裝配如果設(shè)置為:@Resource(name="xxx")時(shí),將按“xxx“尋找bean,沒(méi)有匹配的bean時(shí)返回null@Autowired和@Resource既可對(duì)字段進(jìn)行注入,也可對(duì)屬性進(jìn)入注入何謂同類型?//用于字段上@Resource

privatePersonDaopersonDao;//為注解指定名字@Resource(name="personDaoBean")privatePersonDaopersonDao;//用于屬性的setter上@Resource

publicvo

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論