版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
SpringDI詳解本章目標了解SpringDI機制的基本原理掌握Spring注入依賴對象的方式了解Spring集合類型的裝配掌握注解方式注入依賴對象本章簡介在上一章中,我們學習Spring框架的基本概念,知道了Spring框架的搭建方式,也簡單了解了Spring框架的核心組成結構。它的“依賴注入(DependencyInjection,DI)”模式和“面向方面編程(Aspect-Orientedprogramming,AOP)”帶給了編程者極大的方便。在這一章中,我們將進一步講解Spring“依賴注入”的方式。被注入的對象都可以是什么樣的數(shù)據(jù)類型?注入的形式又是怎樣的?什么又是手工裝配方式和自動裝配?這些問題都將在本章中得到解決。SpringDI原理舉例假設有一個類Person,另一個類Car,如果Person的開車方法drive()需要引用Car,則稱Person類依賴于Car類。延伸到對象,這種依賴關系依然成立,比如說Person類的對象boy依賴于Car類的對象toyota。Spring的DI機制Spring從核心而言,是一個DI容器,其設計哲學是提供一種無侵入式的高擴展性框架。即無需代碼中涉及Spring專有類,即可將其納入Spring容器進行管理。為了實現(xiàn)無侵入性的目標。Spring大量引入了Java的Reflection(反射)機制,通過動態(tài)調用的方式避免硬編碼方式的約束,并在此基礎上建立了其核心組件BeanFactory,以此作為其依賴注入機制的實現(xiàn)基礎。org.springframework.beans包中包括了這些核心組件的實現(xiàn)類,核心中的核心為BeanWrapper和BeanFactory類。Spring注入依賴對象的方式Spring注入基本類型對象時,可以采用構造器注入和屬性setter方法注入兩種方式,<?xmlversion="1.0"encoding="UTF-8"?><beansxmlns="***://***springframework***/schema/beans" xmlns:xsi="***://***w3***/2001/XMLSchema-instance" xsi:schemaLocation="***://***springframework***/schema/beans***://***springframework***/schema/beans/spring-beans-2.5.xsd"> <beanid="orderService"class="com.xtgj.j2ee.chapter09.demo.OrderServiceBean"> <!--構造器注入--> <constructor-argindex="0"type="java.lang.String"value="xxx"/> <!--屬性setter方法注入--> <propertyname="name"value="zhao"/> </bean></beans>注解方式注入依賴對象利用Spring配置文件的配置方式注入依賴對象簡單易懂,操作方便,那么還有沒有更加簡潔的方式能夠實現(xiàn)這一功能呢?繼Spring2.0對SpringMVC進行重大升級后,Spring2.5又為SpringMVC引入了注解驅動功能。基于注解的配置有越來越流行的趨勢,使用Spring的注解,我們無須讓Controller繼承任何接口,無需在XML配置文件中定義請求和Controller的映射關系,僅僅使用注解就可以讓一個POJO具有Controller的絕大部分功能——SpringMVC框架的易用性得到了進一步的增強。在框架靈活性、易用性和擴展性上,SpringMVC已經全面超越了其他的MVC框架,伴隨著Spring一路高唱猛進,可以預見SpringMVC在MVC市場上的吸引力將越來越不可抗拒。接下來,我們就從采用注解方式注入依賴對象說起。這里,可以采用手工裝配或自動裝配兩種方式注入依賴對象,當然,在實際應用中建議使用手工裝配,因為自動裝配會產生未知情況,開發(fā)人員無法預見最終的裝配結果。手工裝配依賴對象引入@Autowired注解(不推薦使用,建議使用@Resource)類的實現(xiàn)(對成員變量進行標注)。例如,在上一節(jié)中,我們曾經向OrderServiceBean類中注入過OrderDaoBean的對象,用@Autowired注解便可以這樣實現(xiàn):@Resource(JSR-250標準注解,推薦使用它來代替Spring專有的@Autowired注解)。Spring不但支持自己定義的@Autowired注解,還支持幾個由JSR-250規(guī)范定義的注解,它們分別是@Resource、@PostConstruct以及@PreDestroy。@Resource的作用相當于@Autowired,只不過@Autowired按byType自動注入,而@Resource默認按byName自動注入罷了。@Resource有兩個屬性是比較重要的,分別是name和type,Spring將@Resource注解的name屬性解析為bean的名字,而type屬性則解析為bean的類型。所以如果使用name屬性,則使用byName的自動注入策略,而使用type屬性時則使用byType自動注入策略。如果既不指定name也不指定type屬性,這時將通過反射機制使用byName自動注入策略。@Resource裝配順序如下如果同時指定了name和type,則從Spring上下文中找到唯一匹配的bean進行裝配,找不到則拋出異常如果指定了name,則從上下文中查找名稱(id)匹配的bean進行裝配,找不到則拋出異常如果指定了type,則從上下文中找到類型匹配的唯一bean進行裝配,找不到或者找到多個,都會拋出異常如果既沒有指定name,又沒有指定type,則自動按照byName方式進行裝配;如果沒有匹配,則回退為一個原始類型(orderDao)進行匹配,如果匹配則自動裝配;自動裝配依賴對象autowire屬性取值如下:byType:按類型裝配,可以根據(jù)屬性的類型,在容器中尋找跟該類型匹配的bean。如果發(fā)現(xiàn)多個,那么將會拋出異常。如果沒有找到,即屬性值為null。byName:按名稱裝配,可以根據(jù)屬性的名稱,在容器中尋找跟該屬性名相同的bean,如果沒有找到,即屬性值為null。constructor:與byType的方式類似,不同之處在于它應用于構造器參數(shù)。如果在容器中沒有找到與構造器參數(shù)類型一致的bean,那么將會拋出異常。autodetect:通過bean類的自省機制(introspection)來決定是使用constructor還是byType方式進行自動裝配。如果發(fā)現(xiàn)默認的構造器,那么將使用byType方式。Spring2.5還為我們引入了組件自動掃描機制,它可以在類路徑底下尋找標注了@Component、@Service、@Controller、@Repository注解的類,并把這些類納入進Spring容器中管理。它的作用和在XML文件中使用bean節(jié)點配置組件是一樣的。下面我們將介紹如何注解Bean,從而從XML配置文件中完全移除Bean定義的配置。Repository@Repository用于標注數(shù)據(jù)訪問組件,即DAO組件@Repository("orderDao")publicclassOrderDaoBean{ publicvoidsave(){ System.out.println("saveorder"); }}Service@Service用于標注業(yè)務層組件@Service("orderService")publicclassOrderServiceBean{ @Resource privateOrderDaoBeanorderDao;}Controller@Controller用于標注控制層組件(如Struts中的Action)@Controller("order")publicclassOrderAction{ @Resource privateOrderServiceBeanorderService;}Spring配置文件這里必須提到的是,我們使用上述注解的前提是必須讓這些注解工作起來,具體的實現(xiàn)方式是在Spring配置文件中加入如下設置:<?xmlversion="1.0"encoding="UTF-8"?><beansxmlns="***://***springframework***/schema/beans" xmlns:xsi=***://***w3***/2001/XMLSchema-instancexmlns:context="***://***springframework***/schema/context" xsi:schemaLocation="***://***springframework***/schema/beans***://***springframework***/schema/beans/spring-beans-2.5.xsd
***://***springframework***/schema/context***://***springframework***/schema/context/spring-context-2.5.xsd">
<context:component-scanbase-package="com.xtgj.j2ee.chapter09"/></beans>Spring過濾方式Spring支持以下4種類型的過濾方式:注解org.example.SomeAnnotation將所有使用SomeAnnotation注解的類過濾出來類名指定org.example.SomeClass過濾指定的類正則表達式com\.kedacom\.spring\.annotation\.web\..*通過正則表達式過濾一些類AspectJ表達式org.example..*Service+通過AspectJ表達式過濾一些類總結Spring大量引入了Java的Reflection(反射)機制,通過動態(tài)調用的方式避免硬編碼方式的約束,并在此基礎上建立了其核心組件BeanFactory,以此作為其依賴注入機制的實現(xiàn)基礎。Spring注入基本類型對象時,可以采用構造器注入和屬性setter方法注入兩種方式?;谧⒔獾呐渲糜性絹碓搅餍械内厔?,使用Spring的注解,我們無須讓Con
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年度辦公場所租賃協(xié)議范本
- 2024年股權轉讓居間服務傭金協(xié)議
- 2024年產業(yè)園區(qū)綜合物業(yè)服務協(xié)議
- 2024年度汽車買賣三方協(xié)議范本
- 2024年高空作業(yè)責任協(xié)議模板
- 2024鋼筋加工服務與質量保障協(xié)議
- 2024工程聯(lián)合經營協(xié)議綱要
- 2024年房產二次銷售協(xié)議模板
- 2024車展現(xiàn)場活動策劃與執(zhí)行協(xié)議
- 2024年度工程咨詢服務項目協(xié)議典范
- 《現(xiàn)代控制理論》課程教學大綱
- 《娛樂場所管理條例》課件
- 北師大版2024-2025學年六年級數(shù)學上冊典型例題系列第一單元圓概念認識篇【八大考點】(原卷版+解析)
- 餐飲服務模考試題(附答案)
- 大數(shù)據(jù) AI大模型-智慧統(tǒng)計大數(shù)據(jù)平臺解決方案(2023版)
- 教科版科學二年級上冊全冊教案(完整版)
- 院長行政查房科主任匯報
- 人教鄂教版小學科學六年級下冊全冊分層練習
- 情感糾紛案件調解協(xié)議書
- 孔明燈的知識與制作課件
- 安徽省江南十校2023-2024學年高一上學期12月分科模擬聯(lián)考數(shù)學試題(解析版)
評論
0/150
提交評論