版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 勞動(dòng)仲裁協(xié)議申請(qǐng)書
- 2023安全生產(chǎn)工作書面協(xié)議書七篇
- 合伙合同合作協(xié)議
- 土地糾紛調(diào)解的協(xié)議書7篇
- 北京房屋出租協(xié)議模板
- 雙方自愿離婚的協(xié)議書8篇
- 舞蹈病病因介紹
- 機(jī)械基礎(chǔ) 課件 模塊八任務(wù)一 軸
- 【中職專用】中職對(duì)口高考-機(jī)電與機(jī)制類專業(yè)-核心課-模擬試卷1(河南適用)(原卷版)
- 重慶2020-2024年中考英語(yǔ)5年真題回-學(xué)生版-專題09 閱讀理解之應(yīng)用文
- 微生物學(xué)智慧樹知到期末考試答案章節(jié)答案2024年沈陽(yáng)農(nóng)業(yè)大學(xué)
- 年產(chǎn)20萬(wàn)噸鎂合金項(xiàng)目可行性研究報(bào)告
- 《短視頻拍攝與制作》課件-3短視頻中期拍攝
- 瀏陽(yáng)煙花術(shù)語(yǔ)大全
- 2024年甘肅省隴南市中考二模地理試題
- 健康睡眠與幸福人生智慧樹知到期末考試答案2024年
- 小班數(shù)學(xué)活動(dòng)《1-5的認(rèn)識(shí)》課件
- 膝痹病的中醫(yī)護(hù)理常規(guī)
- 寵物犬鑒賞與疾病防治智慧樹知到期末考試答案2024年
- 布雷頓森林體系制度缺陷
- 2024年中級(jí)審計(jì)師《審計(jì)理論與實(shí)務(wù)》考試題庫(kù)含解析全套
評(píng)論
0/150
提交評(píng)論