版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
-1-理解Spring體系結構的模塊構成掌握BeanFactory和ApplicationContext的使用方法掌握Bean的生命周期掌握在IoC容器中裝配Bean的方法掌握依賴注入的不同方式掌握注入參數(shù)的不同類型掌握Bean的不同作用域類型掌握IoC容器中對Bean進行自動裝配的不同類型了解依賴檢查的幾種處理模式目標-2-Spring概述Spring是一個全方位的解決方案,主要包括如下功能:基于依賴注入(控制反轉IoC)的核心機制聲明式的面向切面編程(AOP)支持與多種技術整合優(yōu)秀的WebMVC框架Spring具有如下優(yōu)點:低侵入式設計,代碼無污染獨立于各種應用服務器,真正實現(xiàn)WriteOnce、RunAnywhere(一次編寫、隨處運行)的承諾IoC容器降低了業(yè)務對象替換的復雜性,降低了組件之間的耦合AOP容器允許將一些通用任務如安全、事務、日志等進行集中式處理Spring中的ORM和DAO支持提供了與第三方持久層框架的良好整合,并簡化了底層的數(shù)據庫訪問Spring的高度開放性,并不強制開發(fā)者完全依賴于Spring,可自由選用Spring框架的部分或全部功能
-3-Spring體系結構-4-IoC容器IoC(InversionofControl,控制反轉)是Spring框架的基礎,AOP、聲明式事務等功能都是在此基礎上實現(xiàn)的BeanFactoryApplicationContext-5-BeanFactoryorg.springframework.beans.factory.BeanFactory是IoC容器的核心接口,其職責是實例化、定位、配置應用程序中的對象及建立這些對象間的依賴方法功能說明booleancontainsBean(Stringname)判斷容器是否包含id為name的Bean定義ObjectgetBean(Stringname)返回容器中id為name的BeanObjectgetBean(Stringname,ClassrequiredType)返回容器中特定id和類型的BeanClassgetType(Stringname)返回容器中id為name的Bean的類型-6-使用BeanFactory<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEbeansPUBLIC"-//SPRING//DTDBEAN2.0//EN""/dtd/spring-beans-2.0.dtd"><beans> <!--創(chuàng)建一個id為customer的Bean對象--> <beanid="customer"class="com.dh.ch07.pojos.Customer"> <!--根據屬性名稱注入相應的值--> <propertyname="userName"value="zhangsan"/> <propertyname="password"value="123"/> <propertyname="realName"value="張三"/> <propertyname="address"value="青島"/> <propertyname="mobile"value="12345678"/> </bean></beans>//根據配置文件創(chuàng)建ClassPathResource對象ClassPathResourceis=newClassPathResource("bean.xml");//創(chuàng)建BeanFactory對象BeanFactoryfactory=newXmlBeanFactory(is);//從BeanFactory對象中,根據id獲取具體對象Customercustomer=(Customer)factory.getBean("customer");-7-ApplicationContextApplicationContext接口由BeanFactory派生而來,增強了BeanFactory的功能,提供了更多的面向實際應用的方法,如添加了Bean生命周期的控制、框架事件體系、國際化支持、資源加載透明化等多項功能ApplicationContext接口的主要實現(xiàn)類:ClassPathXmlApplicationContext:從類路徑加載配置文件FileSystemXmlApplicationContext:從文件系統(tǒng)中裝載配置文件-8-使用ApplicationContextSpring的配置文件在類路徑下Spring的配置文件在文件系統(tǒng)的路徑下ApplicationContext在初始化應用上下文時,默認會實例化所有的singletonBean(單例Bean)。因此系統(tǒng)前期初始化ApplicationContext時將有較大的系統(tǒng)開銷,時間稍長一些,但程序后面獲取Bean實例時將直接從緩存中調用,因此具有較好的性能ApplicationContextctx=newClassPathXmlApplicationContext("bean.xml");ApplicationContextctx=newFileSystemXmlApplicationContext( "E:/workspace/ch07/src/bean.xml");-9-Bean生命周期-10-Spring配置文件<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEbeansPUBLIC"-//SPRING//DTDBEAN3.0//EN"
"/dtd/spring-beans-3.0.dtd"><beans> <beanid="customer"class="com.dh.ch07.pojos.Customer"> </bean></beans><?xmlversion="1.0"encoding="UTF-8"?><beansxmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance" xmlns:aop="/schema/aop" xmlns:tx="/schema/tx"xsi:schemaLocation=“/schema/beans/schema/beans/spring-beans-3.0.xsd/schema/aop/schema/aop/spring-aop-3.0.xsd/schema/tx/schema/tx/spring-tx-3.0.xsd" default-lazy-init="true"> <beanid="customer"class="com.dh.ch07.pojos.Customer"> </bean></beans>-11-Bean基本配置<beanid="名稱"class="類名"/><?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEbeansPUBLIC"-//SPRING//DTDBEAN2.0//EN""/dtd/spring-beans-3.0.dtd"><beans> <beanid="customer" class="com.dh.ch07.pojos.Film"> </bean></beans>getBean(“film”)
-12-依賴注入的方式依賴注入(DependencyInjection,DI)根據注入方式的不同,Bean的依賴注入通常表現(xiàn)為如下兩種形式:設值注入:通過使用屬性的setter方法注入Bean的屬性值或依賴對象構造注入:通過使用構造器來注入Bean的屬性或依賴對象不管是設值注入,還是構造器注入,都受Spring的IoC容器管理。注入的要么是一個確定的值,要么是對IoC容器中其他Bean的引用。-13-設值注入設值注入(也稱屬性注入)是指IoC容器使用屬性的setter方法注入Bean的屬性值或依賴對象publicclassFilmimplementsSerializable{ /*用戶ID*/ privateIntegerid;/*中文名*/privateStringname;/*上映年份*/privateIntegeryear;/*導演*/privateStringdirector;/*默認構造方法*/publicFilm(){}/*根據屬性創(chuàng)建構造方法*/……… ......get、set方法}<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEbeansPUBLIC"-//SPRING//DTDBEAN//EN""/dtd/spring-beans.dtd"><beans> <beanid="film"class="com.dh.ch07.pojos.Film"> <propertyname="id"value="1"/> <propertyname="name"value="這個殺手不太冷"/> <propertyname="year"value="1994"/> <propertyname="diretor"value="呂克貝松"/> </bean></beans>示例7.1-14-構造注入構造注入是指通過使用構造器來注入Bean的屬性或依賴對象publicclassFilmimplementsSerializable{ ......各個屬性
/*根據屬性創(chuàng)建構造方法*/ publicFilm(Integerid,Stringname,Integeryear,Stringdirector){ this.id=id; =name; this.year=year; this.director=director; }
......get、set方法}<beanid="film2"class="com.dh.ch07.pojos.Film"> <constructor-argtype="java.lang.Integer"> <value>2</value> </constructor-arg> <constructor-argtype="java.lang.String"> <value>阿凡達</value> </constructor-arg> <constructor-argtype="java.lang.Integer"> <value>2009</value> </constructor-arg> <constructor-argtype="java.lang.String"> <value>詹姆斯卡梅隆</value> </constructor-arg></bean>示例7.2-15-注入方式比較設值注入的優(yōu)點如下:與傳統(tǒng)的JavaBean寫法更相似,程序開發(fā)人員更容易了解和接受。通過setter方法設定依賴關系顯得更加直觀、自然對于復雜的依賴關系,如果采用構造注入,會導致構造器過于臃腫,難以閱讀。Spring在創(chuàng)建Bean實例時,需要同時實例化其依賴的全部實例,因而導致性能下降,而使用設值注入,則能避免這些問題。尤其是在某些屬性可選的情況下,多參數(shù)的構造器更加笨重構造注入有如下優(yōu)勢:構造注入可以在構造器中決定依賴關系的注入順序。優(yōu)先依賴的優(yōu)先注入。比如Web開發(fā)時使用數(shù)據庫,可以優(yōu)先注入數(shù)據庫連接的信息對于依賴關系無須變化的Bean,構造注入更有用處。如果沒有setter方法,所有的依賴關系全部在構造器內設定,后續(xù)代碼不會對依賴關系產生破壞。依賴關系只能在構造器中設定,所以只有組件的創(chuàng)建者才能改變組件的依賴關系。而對組件的調用者而言,組件內部的依賴關系完全透明,更符合高內聚的原則-16-注入字面值字面值是可用字符串表示的值,這些值可以通過<value>元素進行注入基本數(shù)據類型及其封裝類、String等類型都可以采取字面值的方式注入<beanid="film"class="com.dh.ch07.pojos.Film"> <!--字面值注入--> <propertyname="id"value="1"/> <propertyname="name"value="這個殺手不太冷"/> <propertyname="year"value="1994"/> <propertyname="diretor"value="呂克貝松"/></bean>示例7.3-17-引用其他的BeanSpringIoC容器中定義的Bean可以相互引用,IoC容器則負責裝配。publicclassSailOrderimplementsSerializable{
privateIntegerid; privateStringchineseName; privateStringenglishName; privateStringgender;.....get/set方法}示例7.4<beanid="film"class="com.dh.ch07.pojos.Film"> <propertyname="id"value="2"/> <propertyname="name"value="阿凡達"/> <propertyname="year"value="2009"/> <propertyname="diretor"value="詹姆斯卡梅隆"/> <!--引用其他Bean,在Film類中,增加男主角屬性,并增加其getter/setter--> <propertyname="leadingMan"> <refbean="actor"></ref> </property></bean>-18-集合類型的值如果Bean的屬性是個集合,可以使用集合元素為Bean注入集合值:list、set、map和props元素分別用來設置類型為List、Set、Map和Propertis的集合屬性值。publicclassEmployeeimplementsSerializable{ //List類型
privateListschools=newArrayList(); //Map類型
privateMapequi=newHashMap(); //Properties類型
privatePropertiesaddress=newProperties(); //Set類型
privateSetwork=newHashSet(); ......get、set方法}<beanid="emp"class="com.dh.Employee"> <propertyname="schools"> <list> <value>青島一中</value> <value>青島大學</value> </list> </property> <propertyname="equi"> <map> <entrykey="主機"value="海爾博越"/> <entrykey="顯示器"value="海爾液晶"/> <entrykey="教材"> <value>東合培訓課程叢書</value> </entry> </map> </property> <propertyname="address"> <props> <propkey="祖籍">山東青島大學</prop> <propkey="現(xiàn)住址">山東青島市南軟件園</prop> </props> </property> <propertyname="work"> <set> <value>東合技術部</value> <beanid="work1"class="com.dh.ch07.pojos.SomeWork1"/> <reflocal="work2"/> </set> </property></bean><beanid="work2"class="com.dh.ch07.pojos.SomeWork2"/>示例7.5-19-Bean間繼承如果多個bean存在相同的配置信息,Spring允許定義一個父Bean,然后為其定義子Bean。子Bean將自動繼承其配置信息。Spring中通過設置<bean>元素的parent屬性為其指定父Bean。<beanid="abstractCust"class="com.dh.ch07.pojos.Customer"
abstract="true"> <propertyname="id"value="1"/> <propertyname="userName"value="zhangsan"/> <propertyname="password"value="123"/> <propertyname="realName"value="張三"/> <propertyname="address"value="青島"/> <propertyname="mobile"value="12345678"/></bean><beanid="customer3"parent="abstractCust"> <propertyname="id"value="3"/></bean><beanid="customer4"parent="abstractCust"> <propertyname="id"value="4"/></bean>-20-Bean間依賴Bean之間的依賴關系使用<ref>元素建立,Spring負責管理這些Bean的關系,當實例化一個Bean時,Spring保證該Bean所依賴的其他Bean已經初始化。如果BeanA所依賴的BeanB并不是BeanA的屬性時,Spring允許用戶通過depends-on屬性指定前置依賴Bean<beanid="sailorder2"class="com.dh.ch07.pojos.SailOrder"
depends-on="customer"></bean><beanid="sailorder3"class="com.dh.ch07.pojos.SailOrder"> <propertyname="custId"> <idrefbean="customer"/> </property></bean>-21-Bean的作用域作用域描述singleton在每個SpringIoC容器中一個Bean定義對應唯一一個對象實例,Bean以單實例的方式存在prototype一個Bean定義對應多個對象實例,每次調用getBean()時,就創(chuàng)建一個新實例request在一次HTTP請求中,一個Bean定義對應一個實例,
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024版農業(yè)大棚建設與病蟲害防治合作合同范本3篇
- 2024年版權應用許可協(xié)議版
- 簡版贈與合同模板
- 2022屆高考英語詞匯詞性轉換及派生總結
- 學期工作計劃模板5篇
- 《宋瓷植物紋樣在首飾設計中的應用研究》
- 《內部控制對會計信息質量影響》
- 《功能對等理論指導下傳記《尤里·加加林-一次飛行,整個人生》(節(jié)選)翻譯實踐報告》
- 2024版動產抵押擔保服務合同協(xié)議2篇
- 《基于改進影子價格法的碳排放權價值評估研究》
- 五年級數(shù)學(小數(shù)四則混合運算)計算題專項練習及答案
- 多無人機路徑規(guī)劃
- 2024年度京東公司與供應商戰(zhàn)略合作合同3篇
- 河南省鄭州市2023-2024學年四年級上學期語文期末試卷(含答案)
- 國開(陜西)2024年《中國制造之高端裝備》形考作業(yè)1-4答案
- 2024年便利店營業(yè)員工作總結范文(2篇)
- 家具設計合同范例
- 2016建筑安裝工程工期定額
- 2023-2024學年廣東省廣州市白云區(qū)九年級(上)期末英語試卷
- 便利店運營部年終總結
- 幕墻工程冬季施工方案
評論
0/150
提交評論