




已閱讀5頁,還剩2頁未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第22講 Spring原理本講目標(biāo): 掌握Spring依賴注入的原理一、 spring簡(jiǎn)介 Spring是一個(gè)開源框架,Rod Johnson創(chuàng)建。 基于控制反轉(zhuǎn)(Inversion of Control ,IoC)和面向切面(Aspect Oriented Programming , AOP)的容器框架。Spring 致力于J2EE 應(yīng)用的各層的解決方案,而不是僅僅專注于某一層的方案??梢哉f Spring 是企業(yè)應(yīng)用開發(fā)的“一站式”選擇,并貫穿表現(xiàn)層、業(yè)務(wù)層及持久層。然而,Spring 并不想取代那些已有的框架,而與它們無縫地整合。 目標(biāo): 使現(xiàn)有技術(shù)更加易用,簡(jiǎn)化企業(yè)開發(fā)。 內(nèi)容: 依賴注入容器,AOP實(shí)現(xiàn)(聲明式事務(wù)), DAO/ORM支持,Web集成 使用Spring好處: 降低組件之間的耦合度, 使各層間松耦。 可以使用容器提供的眾多服務(wù),如:事務(wù)管理服務(wù)、消息服務(wù)等等。 非侵入性,對(duì)Spring API的依賴減少到最低。 AOP技術(shù),很容易實(shí)現(xiàn)如權(quán)限攔截、運(yùn)行期監(jiān)控等功能。 提供眾多輔作類,加快應(yīng)用的開發(fā),如: JdbcTemplate、 HibernateTemplate。 對(duì)于主流的框架提供集成支持,如:JDBC、Hibernate、Struts等,更便于開發(fā)。Spring框架總體架構(gòu)圖二、 依賴注入1. 依賴關(guān)系(Dependency)對(duì)象之間最弱的一種關(guān)聯(lián)方式,是臨時(shí)性的關(guān)聯(lián)。代碼中一般指由局部變量、函數(shù)參數(shù)、返回值建立的對(duì)于其他對(duì)象的調(diào)用關(guān)系。 依賴一般情況下是以下幾種情況之一:a、ClassA中某個(gè)方法的參數(shù)類型是ClassB;這種情況成為耦合;b、ClassA中某個(gè)方法的參數(shù)類型是ClassB的一個(gè)屬性;這種情況成為緊耦合;c、ClassA中某個(gè)方法的實(shí)現(xiàn)實(shí)例化ClassB;d、ClassA中某個(gè)方法的返回值的類型是ClassB;如果出現(xiàn)了上述四種情況之一,兩個(gè)類很有可能就是“依賴”關(guān)系。依賴關(guān)系(Dependency):是類與類之間的連接,依賴總是單向的。依賴關(guān)系代表一個(gè)類依賴于另一個(gè)類的定義。2. IoC 控制反轉(zhuǎn)(Inversion of Control) 所謂控制反轉(zhuǎn)就是應(yīng)用本身不負(fù)責(zé)依賴對(duì)象的創(chuàng)建及維護(hù),依賴對(duì)象的創(chuàng)建及維護(hù)是由外部容器負(fù)責(zé)的。這樣控制權(quán)就由應(yīng)用轉(zhuǎn)移到了外部容器,控制權(quán)的轉(zhuǎn)移就是所謂反轉(zhuǎn)。public class UserBizImpl private UserDao userDao = new UserDaoImpl(); public void save(User user) userDao.save(user); userDao是在應(yīng)用內(nèi)部創(chuàng)建及維護(hù)的。3. 依賴注入(Dependency Injection)當(dāng)我們把依賴對(duì)象交給外部容器負(fù)責(zé)創(chuàng)建,那么UserBizImpl 類可以改成如下:public class UserBizImpl private UserDao userDao ;/通過構(gòu)造器參數(shù),讓容器把創(chuàng)建好的依賴對(duì)象注入進(jìn)UserBizImpl, public UserBizImpl(UserDao userDao) this.userDao=userDao; /也可以使用setter方法進(jìn)行注入public void setUserDao(UserDao userDao)this.userDao=userDao; public void save(User user) userDao.save(user); 所謂依賴注入就是指:在運(yùn)行期,由外部容器動(dòng)態(tài)地將依賴對(duì)象注入到組件中。(這里通過構(gòu)造器注入U(xiǎn)serDao )4. spring實(shí)現(xiàn)依賴注入 運(yùn)行類庫方法一:到/download下載spring,然后進(jìn)行解壓縮,在解壓目錄中找到下面jar文件,拷貝到類路徑下distspring.jarlibjakarta-commonscommons-logging.jar方法二:Hibernate添加spring支持 項(xiàng)目右擊myeclipseadd spring capabilities 添加spring的配置文件該配置模版可以從spring的參考手冊(cè)(docsreferencehtml_singleindex.html)或spring的例子中得到。配置文件的取名可以任意,文件可存放在任何目錄下,但考慮到通用性,一般放在類路徑下。5. 實(shí)例化spring容器實(shí)例化Spring容器常用的兩種方式:方法一:(推薦)在類路徑下尋找配置文件來實(shí)例化容器ApplicationContext ctx = new ClassPathXmlApplicationContext(beans.xml);方法二:在文件系統(tǒng)路徑下尋找配置文件來實(shí)例化容器ApplicationContext ctx = new FileSystemXmlApplicationContext(new String“d:beans.xml“);Spring的配置文件可以指定多個(gè),可以通過String數(shù)組傳入。6. 從spring容器中得到bean當(dāng)spring容器啟動(dòng)后,因?yàn)閟pring容器可以管理bean對(duì)象的創(chuàng)建,銷毀等生命周期,所以我們只需從容器直接獲取Bean對(duì)象就行,而不用編寫一句代碼來創(chuàng)建bean對(duì)象。從容器獲取bean對(duì)象的代碼如下:ApplicationContext ctx = new ClassPathXmlApplicationContext(“beans.xml”);OrderService service = (OrderService)ctx.getBean(personService);getBean()參數(shù)可以指定id屬性,也可以指定name屬性。id通常為有效的標(biāo)識(shí)符。id=userBizImplname可以為非標(biāo)識(shí)符。 name= user.Biz#Impl “無論按照id屬性還是name屬性找到即可7. 實(shí)例化bean 使用類構(gòu)造器實(shí)例化 使用靜態(tài)工廠方法實(shí)例化 public class OrderFactory public static OrderServiceBean createOrder()return new OrderServiceBean(); 使用實(shí)例工廠方法實(shí)例化: public class OrderFactory public OrderServiceBean createOrder()return new OrderServiceBean();8. Bean的作用域 singleton :在每個(gè)Spring IoC容器中一個(gè)bean定義只有一個(gè)對(duì)象實(shí)例。(缺省設(shè)置為singleton) prototype:每次從容器獲取bean都是新的對(duì)象。根據(jù)經(jīng)驗(yàn),對(duì)有狀態(tài)的bean應(yīng)該使用prototype作用域,而對(duì)無狀態(tài)的bean則應(yīng)該使用singleton作用域。 request 表示該針對(duì)每一次HTTP請(qǐng)求都會(huì)產(chǎn)生一個(gè)新的bean,同時(shí)該bean僅在當(dāng)前HTTP request內(nèi)有效 session 表示該針對(duì)每一次HTTP請(qǐng)求都會(huì)產(chǎn)生一個(gè)新的bean,同時(shí)該bean僅在當(dāng)前HTTP session內(nèi)有效 globalSession 不過它僅僅在基于portlet的web應(yīng)用中才有意義。Portlet規(guī)范定義了全局Session 的概念,它被所有構(gòu)成某個(gè)portlet web應(yīng)用的各種不同的portlet所共享。 后面3種均基于web的Spring ApplicationContext情形下有效,了解9. 注入依賴對(duì)象 基本類型對(duì)象注入: /屬性setter方法注入 注入其他bean:表示null值方式一 方式二(使用內(nèi)部bean,但該bean不能被其他bean引用) 10. 集合類型的裝配public class UserBizImpl private Set sets = new HashSet();private List lists = new ArrayList();priva
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 加強(qiáng)工傷醫(yī)療管理制度
- 醫(yī)療廢物儲(chǔ)存管理制度
- 前期物業(yè)日常管理制度
- 前臺(tái)設(shè)計(jì)招標(biāo)方案(3篇)
- 公用設(shè)施設(shè)備管理制度
- 公司章程公司管理制度
- 咨詢外銷績(jī)效管理制度
- 工作倉庫日常管理制度
- 園林綠化項(xiàng)目管理制度
- 賓館清潔服務(wù)管理制度
- 鄉(xiāng)鎮(zhèn)養(yǎng)老院建設(shè)年度工作規(guī)劃
- 公司外聘法人協(xié)議書
- 2025舊設(shè)備購買合同范本
- 土地入股公墓協(xié)議書
- 2025年中國(guó)煤炭裝備制造行業(yè)分析與發(fā)展策略咨詢報(bào)告(定制版)
- 2025年4月自考00041基礎(chǔ)會(huì)計(jì)學(xué)試題及答案含評(píng)分標(biāo)準(zhǔn)
- 施工現(xiàn)場(chǎng)安全隱患常見問題試題及答案
- 2025山西中考:生物高頻考點(diǎn)
- 2018年高考地理試卷(浙江)(11月)(解析卷)
- 《ISO 37001-2025 反賄賂管理體系要求及使用指南》專業(yè)解讀和應(yīng)用培訓(xùn)指導(dǎo)材料之5:7支持(雷澤佳編制-2025A0)
- 2024年復(fù)盤及電商消費(fèi)新趨勢(shì)-魔鏡洞察
評(píng)論
0/150
提交評(píng)論