版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、Struts1+Struts2+Spring+Hibernate+iBatis 一 .Struts 1. 談?wù)勀鉳vc的理解 MVC是Model View Controler的簡(jiǎn)稱。即模型一視圖一控制器。MVC是一種 設(shè)計(jì)模式,它強(qiáng)制性的把應(yīng)用程序的輸入、處理和輸出分開(kāi)。 MVC中的模型、視圖、控制器它們分別擔(dān)負(fù)著不同的任務(wù)。 視圖:視圖是用戶看到并與之交互的界面。視圖向用戶顯示相關(guān)的數(shù)據(jù),并接受用 戶的輸入。視圖不進(jìn)行任何業(yè)務(wù)邏輯處理。 模型:模型表示業(yè)務(wù)數(shù)據(jù)和業(yè)務(wù)處理。相當(dāng)于 JavaBean 一個(gè)模型能為多個(gè)視圖提 供數(shù)據(jù)。這提高了應(yīng)用程序的重用性 控制器:當(dāng)用戶單擊 Web頁(yè)面中的提交
2、按鈕時(shí),控制器接受請(qǐng)求并調(diào)用相應(yīng)的模型 去處理請(qǐng)求。 然后根據(jù)處理的結(jié)果調(diào)用相應(yīng)的視圖來(lái)顯示處理的結(jié)果。 MVC的處理過(guò)程:首先控制器接受用戶的請(qǐng)求,調(diào)用相應(yīng)的模型來(lái)進(jìn)行業(yè)務(wù)處 理,并返回?cái)?shù)據(jù)給控制器??刂破髡{(diào)用相應(yīng)的視圖來(lái)顯示處理的結(jié)果。并通過(guò)視圖 呈現(xiàn)給用戶。 2. struts1.2和struts2.0的區(qū)別?如何控制兩種框架中的單例模式? struts1.2和 struts2.0的對(duì)比 a、Action 類: struts1.2要求 Action 類繼承一個(gè)基類。struts2.0 Action 要求繼承 ActionSupport 基類 b、線程模式 struts1.2 Action
3、是單例模式的并且必須是線程安全的,因?yàn)閮H有一個(gè)Action的實(shí)例 來(lái)處理所有的請(qǐng)求。 單例策略限制了 Struts1.2 Action能做的事情,并且開(kāi)發(fā)時(shí)特別小心。Action資源必 須是線程安全的或同步的。 struts2.0 Action為每一個(gè)請(qǐng)求產(chǎn)生一個(gè)實(shí)例,因此沒(méi)有線程安全問(wèn)題。 c、Servlet 依賴 struts1.2 Action依賴于 Servlet API,因?yàn)楫?dāng)一個(gè) Action 被調(diào)用時(shí) HttpServletRequest 和 HttpServletResponse被傳遞給 execut 方法。 struts2.0 Action不依賴于容器,允許Action脫離容
4、器單獨(dú)測(cè)試。如果需要,Struts2 Action仍然可以訪問(wèn)初始的 Request和 Response 但是,其他的元素減少或者消除了直接訪問(wèn)HttpServletRequest和 HttpServletRespo nse的必要性。 d、可測(cè)性 測(cè)試struts1.2 Action的一個(gè)主要問(wèn)題是 execute方法暴露了 Servlet API(這使得測(cè)試 要依賴于容器。一個(gè)第三方擴(kuò)展:struts TestCase 提供了一套struts1.2的模擬對(duì)象來(lái)進(jìn)行測(cè)試。 Struts2.0 Action可以通過(guò)初始化、設(shè)置屬性、調(diào)用方法來(lái)測(cè)試,依賴注入”也使得測(cè) 試更容易。 3. 項(xiàng)目中為什
5、么使用SSH 1. 使用Struts是因?yàn)閟truts是基于MVC模式的,很好的將應(yīng)用程序進(jìn)行了分層,使 開(kāi)發(fā)者更關(guān)注于業(yè)務(wù)邏輯的實(shí)現(xiàn);第二,struts有著豐富的taglib,如能靈活運(yùn)用, 則能大大提高開(kāi)發(fā)效率 2. 使用Hibernate:因?yàn)閔ibernate為Java應(yīng)用提供了一個(gè)易用的、高效率的對(duì)象關(guān) 系映射框架。hibernate是個(gè)輕量級(jí)的持久性框架,功能豐富。 3. 使用Spring:因?yàn)閟pring基于IoC(Inversion of Control,反向控制和 AOP構(gòu)架多 層j2ee系統(tǒng)的框架,但它不強(qiáng)迫你必須在每一層中必須使用Spring,因?yàn)樗K 化的很好,允許你
6、根 據(jù)自己的需要選擇使用它的某一個(gè)模塊; 采用IoC使得可以很容易的實(shí)現(xiàn)bean的裝配,提供了簡(jiǎn)潔的AOP并據(jù)此實(shí)現(xiàn)事務(wù) 管理(Tra nscati on Man agme nt 等等 4. struts如何實(shí)現(xiàn)國(guó)際化 以下以兩國(guó)語(yǔ)言(中文,英文為例: 1. 在工程中加入Struts支持 2. 編輯ApplicationRperties文件,在其中加入要使用國(guó)際化的信息,例如: lable.welcome.ch in a=Welcome! 3. 創(chuàng)建英文資源文件 ApplicationResource_perites 4. 創(chuàng)建臨時(shí)中文資源文件 Applica
7、tionResource_perites例如: lable.welcom.china二中國(guó)歡迎您! 5. 對(duì)臨時(shí)中文資源文件進(jìn)行編碼轉(zhuǎn)換??梢允褂胢yeclipse的插件也可以在dos下 執(zhí)行: n ative2ascii -en cod ing gb2312 Applicati on Resource_perties Applicati on Resource_zh_CN.properties 6. 在 jsp 中加入 struts 的 bean標(biāo)記庫(kù) 顯示信息: 可以在struts-config.xml文件中定義多個(gè)資源包,而每個(gè)資源包可使用 key屬性指
8、定包的名稱。 5. struts2.0的常用標(biāo)簽 1. 往action里傳值: 2. 顯示標(biāo)簽property用于輸出指定值: 3. 用于從頁(yè)面往action中(user的對(duì)象內(nèi)傳值: 4. 判斷用于在頁(yè)面中判斷指定數(shù)據(jù) . 5. 迭代用于將List、Map、ArrayList等集合進(jìn)行循環(huán)遍歷 6. struts1中怎么配置? form-bean配置:(在配置文件 struts-config.xml 中: name:指定form的名字;type指定form的類型:包名+類名; action 配置:(在配置文件 struts-config.xml 中 attribute in put二 n a
9、me= parameter= scope=request type二 path:請(qǐng)求 Action 的名字;attribute: form 的名字,與 form-bean中的 name對(duì)應(yīng); in put:輸入頁(yè)的路徑; name:如果配置了 attribute,name不起作用,與 attribute 一樣;parameter 使用分發(fā) Action時(shí),指定調(diào)用分發(fā)Action中的方法名; scope Action的范圍;type: Action的類型:包名+類名; 8. actio n是單實(shí)例還是多實(shí)例,為什么? action是單實(shí)例的。當(dāng)多個(gè)用戶訪問(wèn)一個(gè)請(qǐng)求的時(shí)候,服務(wù)器內(nèi)存中只有一個(gè)與
10、之 對(duì)應(yīng)的action類對(duì)象。 因?yàn)楫?dāng)服務(wù)器第一次加載struts的配置文件的時(shí)候,創(chuàng)建了一個(gè)Action后,每發(fā)送一 個(gè)請(qǐng)求,服務(wù)器都會(huì)先去檢索相應(yīng)的范圍內(nèi)(request,session是否存在 這樣一個(gè)action實(shí)例,如果存在,則使用這個(gè)實(shí)例,如果不存在,則創(chuàng)建一個(gè)action實(shí) 例。 9. dispatchAction是用什么技術(shù)實(shí)現(xiàn)的? DispatchAction是Aciton的一個(gè)子類,主要解決了一個(gè)請(qǐng)求處理多個(gè)功能的問(wèn)題 普通的Action你只能寫execute方法來(lái)處理業(yè)務(wù),而想用這一個(gè)Action處理多個(gè)任 務(wù),你必須要請(qǐng)求參數(shù)進(jìn)行解析,用if語(yǔ)句塊來(lái)處理 10. str
11、uts2.0的 mvc 模式? struts2的mvc模式:當(dāng)用戶在頁(yè)面提交用戶請(qǐng)求時(shí),該請(qǐng)求需要提交給struts2的控 制器處理。struts2的控制器根據(jù)處理結(jié)果, 決定將哪個(gè)頁(yè)面呈現(xiàn)給客戶端。 11. struts的處理流程。 一、ActionServlet 的初始化 ActionServlet作為Struts組件的前端控制器,由于 web.xml的相應(yīng)配置: 在應(yīng)用一加載時(shí)即會(huì)被實(shí)例化并調(diào)用其init方法,init方法所做的主要工作有二: 1. 加載struts配置文件,并創(chuàng)建用于圭寸裝配置信息的ModuleConfig對(duì)象 2. 加載資源文件,并創(chuàng)建用于封裝資源文件的Message
12、Resource對(duì)象 需要注意兩點(diǎn):如果 web.xml有多模塊配置,將創(chuàng)建多個(gè) ModuleConfig對(duì)象和 MessageResource對(duì) 象分另廿 用于封裝各個(gè)模塊的struts配置文件和資源文件。 針對(duì)各個(gè)模塊所創(chuàng)建的ModuleConfig對(duì)象和MessageResource對(duì)象將存儲(chǔ)在 ServletCo ntext中,對(duì)應(yīng)的屬 性名中有該模塊名稱的相應(yīng)標(biāo)識(shí)。 另外,如果有相應(yīng)配置的話,init方法還將初始化數(shù)據(jù)源和PlugIn 二、Action Servlet 的 process 所有形如*.do的請(qǐng)求(根據(jù)web.xml中的相關(guān)配置)將提交給 ActionServlet,最
13、終 將調(diào)用其process方法 。process方法的主要工作有三: 1. 根據(jù)請(qǐng)求信息獲知所請(qǐng)求的模塊名稱,從ServletCo ntext中獲得與請(qǐng)求模塊對(duì)應(yīng) 的的 ModuleConfig 對(duì) 象,并存儲(chǔ)到request中。 2. 根據(jù)模塊信息獲得相應(yīng)的RequestProcesso對(duì)象,一個(gè)模塊對(duì)應(yīng)一個(gè) RequestProcesso對(duì) 象, RequestProcesso對(duì)象將關(guān)聯(lián)與所屬模塊對(duì)應(yīng)的 ModuleConfig對(duì)象。 3. 調(diào)用 RequestProcesso對(duì)象的 process方法,將 request和 response作為參數(shù)傳遞 給它。 三、RequestProc
14、esso的 process RequestProcesso對(duì)象的process方法的主要工作有五步: 1. 調(diào)用自己的 processPreprocess(request, respon方法,該方法不進(jìn)行任何操作, 用于子類重寫 擴(kuò)展其功能。 2. 獲得與請(qǐng)求地址所匹配的 ActionMapping對(duì)象,AcionMapping對(duì)象用于圭寸裝一 個(gè)特定acion的配置信息 。 3. 根據(jù)ActionMapping中的配置信息獲得ActionForm對(duì)象(該對(duì)象將緩存到 request或 session中),并 將表單數(shù)據(jù)填充到ActionForm中,然后根據(jù)ActionMapping的配置決定
15、是否驗(yàn)證 ActionForm,如果驗(yàn)證, 將調(diào)用ActionForm的validate方法,若其返回的 ActionErros對(duì)象中包含 Actio nMessage對(duì)象則表示驗(yàn)證 失敗,將轉(zhuǎn)向action配置信息in put屬性所指示的地址。 4. 如果Actio nF orm無(wú)需驗(yàn)證或驗(yàn)證通過(guò)將創(chuàng)建并緩存與請(qǐng)求地址匹配的Actio n對(duì) 象,將 ActionMapping 對(duì)象、ActionForm 對(duì)象、request和 responsef乍為參數(shù)調(diào)用其 execute方法。 5. 根據(jù)Action對(duì)象的execute方法返回的ActionForward對(duì)象,將請(qǐng)求轉(zhuǎn)發(fā)或重定 向至U該
16、 ActionForward 所封裝的地址。 二.Hibernate 1. Hibernate工作原理? hibernate,通過(guò)對(duì)jdbc進(jìn)行封裝,對(duì)java類和 關(guān)系數(shù)據(jù)庫(kù)進(jìn)行mapping,實(shí)現(xiàn)了 對(duì)關(guān)系數(shù)據(jù)庫(kù)的面向?qū)ο蠓绞降牟僮?,改變了傳統(tǒng)的 jdbc + sql操作數(shù)據(jù)的方式, 從而使開(kāi)發(fā)人員可以話更多精力進(jìn)行對(duì)象方面的開(kāi)發(fā) 1讀取并解析配置文件 2. 讀取并解析映射信息,創(chuàng)建 Sessio nFactory 3. 打開(kāi) Sesssion 4. 創(chuàng)建事務(wù)Transation 5. 持久化操作 6. 提交事務(wù) 7. 關(guān)閉 Session 8. 關(guān)閉 SesstionFactory 2.
17、 為什么要用Hibernate? 對(duì)JDBC訪問(wèn)數(shù)據(jù)庫(kù)的代碼做了封裝,對(duì)java類和關(guān)系數(shù)據(jù)庫(kù)進(jìn)行mapping,實(shí) 現(xiàn)了對(duì)關(guān)系數(shù)據(jù)庫(kù)的面向?qū)ο蠓绞降牟僮?,改變了傳統(tǒng)的jdbc + sql操作數(shù)據(jù)的方 式,大大簡(jiǎn)化了數(shù)據(jù)訪問(wèn)層繁瑣的重復(fù)性代碼。Hibernate是一個(gè)基于JDBC的主 流持久化框架,是一個(gè)優(yōu)秀的 ORM實(shí)現(xiàn)。他很大程度的簡(jiǎn)化 DAO層的編碼工 作。hibernate的性能非常好,因?yàn)樗莻€(gè)輕量級(jí)框架。映射的靈活性很出色。它 支持各種關(guān)系數(shù)據(jù)庫(kù),從一對(duì)一到多對(duì)多的各種復(fù)雜關(guān)系。 3. 什么是Hibernate的并發(fā)機(jī)制?怎么去處理并發(fā)問(wèn)題? Hibernate并發(fā)機(jī)制: a、Hi
18、bernate的Session對(duì)象是非線程安全的,對(duì)于單個(gè)請(qǐng)求,單個(gè)會(huì)話,單個(gè)的工作單 元(即單個(gè)事務(wù),單個(gè)線程,它通常只使用一次, 然后就丟棄。 如果一個(gè)Session實(shí)例允許共享的話,那些支持并發(fā)運(yùn)行的例如Http request,session bean將會(huì)導(dǎo)致出現(xiàn)資源爭(zhēng)用。 如果在Http Session中有hibernate的Session的話,就可能會(huì)出現(xiàn)同步訪問(wèn) Http Session只要用戶足夠快的點(diǎn)擊瀏覽器的刷新”, 就會(huì)導(dǎo)致兩個(gè)并發(fā)運(yùn)行的線程使用同一個(gè)Session b、多個(gè)事務(wù)并發(fā)訪問(wèn)同一塊資源,可能會(huì)引發(fā)第一類丟失更新,臟讀,幻讀,不可 重復(fù)讀,第二類丟失更新一系列的
19、問(wèn)題。 解決方案:設(shè)置事務(wù)隔離級(jí)別。 Serializable:串行化。隔離級(jí)別最高 Repeatable Read 可重復(fù)讀 Read Committed:已提交數(shù)據(jù)讀 Read Un committed:未提交數(shù)據(jù)讀。隔離級(jí)別最差 設(shè)置鎖:樂(lè)觀鎖和悲觀鎖 樂(lè)觀鎖:使用版本號(hào)或時(shí)間戳來(lái)檢測(cè)更新丟失,在的映射中設(shè)置optimistic- lock=all可以在沒(méi)有版本或者時(shí)間戳屬性映射的情況下實(shí)現(xiàn)版本檢查,此時(shí) Hibernate 將 比較一行記錄的每個(gè)字段的狀態(tài)行級(jí)悲觀鎖:Hibernate總是使用數(shù)據(jù)庫(kù)的鎖定機(jī) 制,從不在內(nèi)存中鎖定對(duì)象!只要為 JDBC連接指定一下隔 離級(jí)別,然后讓數(shù)據(jù)
20、庫(kù)去搞定一切就夠了。類 LockMode定義了 Hibernate所需的不同的鎖定級(jí)別: LockMode.UPGRADE,LockMode.UPGRADE_NOWAIT,LockMode.READ; 2. Hibernate和spring中常出現(xiàn)的幾個(gè)異常 org.spri ngframework.bea ns.factory.Bea nCreatio nExceptio n: Error creati ng bea n with n ame sessio nF actory defi ned in ServletC on text resource /WEB-INF/applicatio
21、nCo ntext.xml: In itializati on of bea n failed; n ested excepti on is org.hiber nate.Mapp in gExceptio n: Repeated colu mn in mapp ing for en tity: com.xi ndeco.myregister.pojo.MyRegisterl nfo colum n: password (should be mapped with in sert=false update=false 出錯(cuò)原因:password和repassword同時(shí)對(duì)應(yīng)數(shù)據(jù)庫(kù)表中的 pas
22、sword一列,同時(shí) update和insert都設(shè)為true。xml文件如下: type=java .Ian g.Stri ng update=true in sert=true access=property colu mn=password len gth = 32 / type=java.la ng.Stri ng update=false in sert=false access=property colu mn=password len gth = 32 / 解決方法:將 repassword的 insert 和 update設(shè)為 false。 org.spri ngframewo
23、rk.bea ns.factory.Bea nCreatio nExceptio n: Error creati ng bea n with n ame sessio nF actory defi ned in ServletC on text resource /WEB-INF/applicatio nCo ntext.xml: In itializati on of bea n failed ;n ested excepti on is org.hibernate.PropertyNotF oun dExceptio n: Could not find a getter for ID in
24、 class 錯(cuò)誤原因:hibernate的映射文件中ID是大寫的,而pojo的類中id是小寫的 解決方法:要么將pojo類中的id改稱大寫,要么把hibernate的映射文件中的ID 改稱小寫。 4. Hibernate與 jdbc 的聯(lián)系 hibernate是jdbc的輕量級(jí)圭寸裝,包括jdbc的與數(shù)據(jù)庫(kù)的連接(用 perty 的配置文件實(shí)現(xiàn)當(dāng)然本質(zhì)是圭寸裝了jdbc的forname), 和查詢,刪除等代碼,都用面向?qū)ο蟮乃枷胗么a聯(lián)系起來(lái),hibernate通過(guò)hbm 配置文件把po類的字段和數(shù)據(jù)庫(kù)的字段關(guān)聯(lián)起來(lái)比如數(shù)據(jù)庫(kù)的id, 在 po 類中就是 pravi
25、te Long id; public Long getId( ;public setld(Long id; 然后hql語(yǔ)句也是面向?qū)ο蟮?,它的查詢語(yǔ)句不是查詢數(shù)據(jù)庫(kù)而是查詢類的,這些實(shí) 現(xiàn)的魔法就是xml文件,其實(shí)hibernate=M裝的jdbc+xml文件 5. Hibernate與 spring 的聯(lián)系 hibernate中的一些對(duì)象可以給 Spring來(lái)管理,讓Spring容器來(lái)創(chuàng)建hibernate中一些 對(duì)象實(shí)例化。例如:SessionFactory HibernateTemplate等。 Hibernate本來(lái)是對(duì)數(shù)據(jù)庫(kù)的一些操作,放在DAO層,而Spring給業(yè)務(wù)層的方法定義
26、了事務(wù),業(yè)務(wù)層調(diào)用DAO層的方法,很好的將Hibernate的操作也加入到事務(wù)中來(lái) 了。 6. Hibernate自帶的分頁(yè)機(jī)制是什么?如果不使用Hibernate自帶的分頁(yè),則采用什 么方式分頁(yè)? 1、 hibernate自帶的分頁(yè)機(jī)制:獲得 SessionX寸象后,從Session中獲得Query對(duì) 象。用Query.setFirstResult(:設(shè)置要顯示的第一行數(shù)據(jù), Query.setMaxResults(:設(shè)置要顯示的最后一行數(shù)據(jù)。 2、不使用hibernate自帶的分頁(yè),可采用sql語(yǔ)句分頁(yè), 如:5:為每頁(yè)顯示的記錄,2 為當(dāng)前頁(yè):select * top 5 from ta
27、ble where tabid not in (select tabid top (2-1*5 from table; 7. hibernate的對(duì)象的三種持久化狀態(tài),并給出解釋? 不清楚hibernate的對(duì)象的三種持久化狀態(tài),只知道hibernate對(duì)象的三種狀態(tài),下面有 介紹。 8. hibernate中一對(duì)多配置文件返回的是什么? hibernate中一對(duì)多配置文件會(huì)相應(yīng)的映射為兩張表,并且它們之間的關(guān)系是一對(duì)多 的。 例如:一個(gè)student和classes表的關(guān)系。一個(gè)學(xué)生只能是一個(gè)班的,一個(gè)班可以有 多個(gè)學(xué)生。 9. update ()和 saveOrUpdate ()的區(qū)別?
28、update和 saveOrUpdate是用來(lái)對(duì)跨Session的PO進(jìn)行狀態(tài)管理的。 update方法操作的對(duì)象必須是持久化了的對(duì)象。也就是說(shuō),如果此對(duì)象在數(shù)據(jù)庫(kù)中 不存在的話,就不能使用update(方法。 saveOrUpdate方法操作的對(duì)象既可以使持久化了的,也可以使沒(méi)有持久化的對(duì) 象。如果是持久化了的對(duì)象調(diào)用saveOrUpdate則會(huì) 更新數(shù)據(jù)庫(kù)中的對(duì)象;如果是未持久化的對(duì)象使用此方法,則save到數(shù)據(jù)庫(kù)中。 10. hibernate的三種狀態(tài)之間如何轉(zhuǎn)換 當(dāng)對(duì)象由瞬時(shí)狀態(tài)(Transient save時(shí),就變成了持久化狀態(tài)。 當(dāng)我們?cè)赟ession里存儲(chǔ)對(duì)象的時(shí)候,實(shí)際是在
29、Session的Map里存了一份, 也就是它的緩存里放了一份,然后,又到數(shù)據(jù)庫(kù)里存了一份,在緩存里這一份叫持 久對(duì)象(Persisten。 Sessio n Close(了,它的緩存也都關(guān)閉了,整個(gè) Sessio n也就失效了, 這個(gè)時(shí)候,這個(gè)對(duì)象變成了游離狀態(tài)(Detache d,但數(shù)據(jù)庫(kù)中還是存在的。 當(dāng)游離狀態(tài)(Detachedupdate時(shí),又變?yōu)榱顺志脿顟B(tài)(Persisten。 當(dāng)持久狀態(tài)(Persistentdelete時(shí),又變?yōu)榱怂矔r(shí)狀態(tài)(Transient, 此時(shí),數(shù)據(jù)庫(kù)中沒(méi)有與之對(duì)應(yīng)的記錄。 11. hibernate拒絕連接、服務(wù)器崩潰的原因?最少寫5個(gè) 1. db沒(méi)有打開(kāi)
30、 2. 網(wǎng)絡(luò)連接可能出了問(wèn)題 3. 連接配置錯(cuò)了 4. 驅(qū)動(dòng)的driver,url是否都寫對(duì)了 5. LIB下加入相應(yīng)驅(qū)動(dòng),數(shù)據(jù)連接代碼是否有誤 6. 數(shù)據(jù)庫(kù)配置可能有問(wèn)題 7. 當(dāng)前聯(lián)接太多了,服務(wù)器都有訪問(wèn)人數(shù)限制的 8. 服務(wù)器的相應(yīng)端口沒(méi)有開(kāi),即它不提供相應(yīng)的服務(wù) 9 hibernate有哪些緩存,分別怎么使用? 10你對(duì)hibernate的了解到了一個(gè)什么樣的程度? 11寫出一個(gè)sql語(yǔ)句體現(xiàn)hibernate中一對(duì)多的關(guān)系 12. Hibernate 介紹 Hibernate是一個(gè)開(kāi)放源代碼的對(duì)象關(guān)系映射框架,它對(duì)JDBC進(jìn)行了非常輕量級(jí) 的對(duì)象封裝,使得Java程序員可以隨心所欲
31、的使用對(duì)象編程思維來(lái)操縱數(shù)據(jù)庫(kù)。 Hibernate可以應(yīng)用在任何使用 JDBC的場(chǎng)合,既可以在Java的客戶端程序使用,也可以在 Servlet/JSP的Web應(yīng) 用中使用,最具革命意義的是,Hibernate可以在應(yīng)用EJB的J2EE架構(gòu)中取代 CMP,完成數(shù)據(jù)持久化的重任。 Hibernate的核心接口一共有 5個(gè),分別為:Session SessionFactory Transactior、Query和Configuration。這5個(gè)核心接口在任何開(kāi)發(fā)中都會(huì)用到。通 過(guò)這些接口,不僅可以對(duì)持久化對(duì) 象進(jìn)行存取,還能夠進(jìn)行事務(wù)控制。下面對(duì)這五個(gè)核心接口分別加以介紹 ?Session接口
32、:Session接口負(fù)責(zé)執(zhí)行被持久化對(duì)象的 CRUD操作(CRUD的任務(wù) 是完成與數(shù)據(jù)庫(kù)的交流,包含了很多常見(jiàn)的 SQL語(yǔ)句。但需要注意的是Session 對(duì)象是非線程安全的。同時(shí), Hibernate的session不同于JSP應(yīng)用中的HttpSession。這里當(dāng)使用session這個(gè)術(shù)語(yǔ) 時(shí),其實(shí)指的是Hibernate中的session,而以后會(huì)將HttpSesion對(duì)象稱為用戶 session ?SessionFactory接 口 :SessionFactroy接 口負(fù)責(zé)初始化 Hibernate。它充當(dāng)數(shù)據(jù)存 儲(chǔ)源的代理,并負(fù)責(zé)創(chuàng)建 Session對(duì)象。這里用到了工廠模式。需要注意
33、的是 Sessio nFactory并不是輕量級(jí) 的,因?yàn)橐话闱闆r下,一個(gè)項(xiàng)目通常只需要一個(gè)Sessi onF actory就夠,當(dāng)需要操作 多個(gè)數(shù)據(jù)庫(kù)時(shí),可以為每個(gè)數(shù)據(jù)庫(kù)指定一個(gè)Sessi onF actory ?Configuration 接口 :Configuration 接口負(fù)責(zé)配置并啟動(dòng) Hibernate,創(chuàng)建 SessionFactory對(duì)象。在Hibernate的啟動(dòng)的過(guò)程中,Configuration類的實(shí)例首先定 位映射文檔位置、讀取配置 ,然后創(chuàng)建SessionFactory對(duì)象。 ?Transaction接口 :Transaction接口負(fù)責(zé)事務(wù)相關(guān)的操作。它是可選的,
34、開(kāi)發(fā)人 員也可以設(shè)計(jì)編寫自己的底層事務(wù)處理代碼。 ?Query和Criteria接口:Query和Criteria接口負(fù)責(zé)執(zhí)行各種數(shù)據(jù)庫(kù)查詢。它可 以使用HQL語(yǔ)言或SQL語(yǔ)句兩種表達(dá)方式。 13. Hibernate主鍵介紹 Assig ned Assig ned方式由程序生成主鍵值,并且要在 save之前指定否則會(huì)拋出異常 特點(diǎn):主鍵的生成值完全由用戶決定,與底層數(shù)據(jù)庫(kù)無(wú)關(guān)。用戶需要維護(hù)主鍵 值,在調(diào)用session.save之前要指定主鍵值。 Hilo Hilo使用高低位算法生成主鍵,高低位算法使用一個(gè)高位值和一個(gè)低位值,然 后把算法得到的兩個(gè)值拼接起來(lái)作為數(shù)據(jù)庫(kù)中的唯一主鍵。Hilo方
35、式需要額外的數(shù) 據(jù)庫(kù)表和字段提供高位值來(lái) 源。默認(rèn)請(qǐng)況下使用的表是 hibernatenique_key默認(rèn)字段叫作 next_hi。next_hi必須有一條記錄否則會(huì) 出現(xiàn)錯(cuò)誤。 特點(diǎn):需要額外的數(shù)據(jù)庫(kù)表的支持,能保證同一個(gè)數(shù)據(jù)庫(kù)中主鍵的唯一性,但 不能保證多個(gè)數(shù)據(jù)庫(kù)之間主鍵的唯一性。Hilo主鍵生成方式由Hibernate維護(hù),所 以Hilo方式與底層數(shù)據(jù)庫(kù)無(wú) 關(guān),但不應(yīng)該手動(dòng)修改hi/lo算法使用的表的值,否則會(huì)引起主鍵重復(fù)的異常。 In creme nt In creme nt方式對(duì)主鍵值采取自動(dòng)增長(zhǎng)的方式生成新的主鍵值,但要求底層數(shù) 據(jù)庫(kù)的支持Sequenee女口 Oracle, D
36、B2等。需要在映射文件 xxx.hbm.xml中加入 In creme nt標(biāo)志符的設(shè)置。 特點(diǎn):由Hibernate本身維護(hù),適用于所有的數(shù)據(jù)庫(kù),不適合多進(jìn)程并發(fā)更新 數(shù)據(jù)庫(kù),適合單一進(jìn)程訪問(wèn)數(shù)據(jù)庫(kù)。不能用于群集環(huán)境。 Ide ntity Identity當(dāng)時(shí)根據(jù)底層數(shù)據(jù)庫(kù),來(lái)支持自動(dòng)增長(zhǎng),不同的數(shù)據(jù)庫(kù)用不同的主鍵 增長(zhǎng)方式。 特點(diǎn):與底層數(shù)據(jù)庫(kù)有關(guān),要求數(shù)據(jù)庫(kù)支持Identity,如MySQI中是 auto_increment, SQL Serve沖是 Identity,支持的數(shù)據(jù)庫(kù)有 MySql、SQL Server、 DB2、Sybase和 HypersonicSQL。 Identit
37、y無(wú)需Hibernate和用戶的干涉,使用較為方便,但不便于在不同的數(shù)據(jù)庫(kù)之 間移植程序。 Sequenee Sequenee需要底層數(shù)據(jù)庫(kù)支持Sequenee方式,例如Oracle數(shù)據(jù)庫(kù)等 特點(diǎn):需要底層數(shù)據(jù)庫(kù)的支持序列,支持序列的數(shù)據(jù)庫(kù)有DB2、PostgreSq、 Qracle、SAPDb等在不同數(shù)據(jù)庫(kù)之間移植程序,特別從支持序列的數(shù)據(jù)庫(kù)移植到不 支持序列的數(shù)據(jù)庫(kù)需要修改配 置文件 Native Native主鍵生成方式會(huì)根據(jù)不同的底層數(shù)據(jù)庫(kù)自動(dòng)選擇Identity、Sequenee Hilo主鍵生成方式 特點(diǎn):根據(jù)不同的底層數(shù)據(jù)庫(kù)采用不同的主鍵生成方式。由于Hibernate會(huì)根 據(jù)底
38、層數(shù)據(jù)庫(kù)采用不同的映射方式,因此便于程序移植,項(xiàng)目中如果用到多個(gè)數(shù)據(jù) 庫(kù)時(shí),可以使用這種方式。 UUID UUID使用128位UUID算法生成主鍵,能夠保證網(wǎng)絡(luò)環(huán)境下的主鍵唯一性, 也就能夠保證在不同數(shù)據(jù)庫(kù)及不同服務(wù)器下主鍵的唯一性。 特點(diǎn);能夠保證數(shù)據(jù)庫(kù)中的主鍵唯一性,生成的主鍵占用比較多的存貯空間 Foreig n GUID Foreign用于一對(duì)一關(guān)系中。GUID主鍵生成方式使用了一種特殊算法,保證 生成主鍵的唯一性,支持SQL Server和MySQL 13.Hibernate源碼中幾個(gè)包的作用簡(jiǎn)要介紹 net.sf.hibernate.*該包的類基本上都是接口類和異常類 net.sf
39、.hibernate.cache.* JCS 的實(shí)現(xiàn)類 net.sf.hibernate.cfg.* 配置文件讀取類 net.sf.hibernate.collection.*Hibernate集合接口實(shí)現(xiàn)類,例如 List,Set,Bag 等等,Hibernate之所以要自行編寫集合接口實(shí)現(xiàn)類是為了支持lazy loading n et.sf.hibernate.co nn ectio n.* 幾個(gè)數(shù)據(jù)庫(kù)連接池的 Provider n et.sf.hibernate.dialect.* 支持多種數(shù)據(jù)庫(kù)特性,每個(gè)Dialect實(shí)現(xiàn)類代表一種 數(shù)據(jù)庫(kù),描述了該數(shù)據(jù)庫(kù)支持的數(shù)據(jù)類型和其它特點(diǎn),例如
40、是否有 AutoIncrement,是否有 Sequenee 是否有分頁(yè)sql等等 net.sf.hibernate.eg.* Hibernate 文檔中用到的例子 net.sf.hibernate.engine.*這個(gè)包的類作用比較散 net.sf.hibernate.expression.* HQL 支持的表達(dá)式 net.sf.hibernate.hq.* HQL 實(shí)現(xiàn) net.sf.hibernate.id.* ID 生成器 n et.sf.hibernate.impl.*最核心的包,一些重要接口的實(shí)現(xiàn)類,如果Session, SessionFactory Query 等 net.sf.
41、hibernate.jca.* JCA支持,把Session包裝為支持JCA的接口實(shí)現(xiàn)類 net.sf.hibernate.jmx.* 我不懂JMX,只知道JMX是用來(lái)編寫App Server的管 理程序的,大概是JMX部分接口的實(shí)現(xiàn),使得 App Server可以通過(guò)JMX接口管理 Hibernate net.sf.hibernate.loader.* 也是很核心的包,主要是生成 sql語(yǔ)句的 net.sf.hibernate.lob.*Blob 和 Clob 支持 n et.sf.hiber nate.mapp in g.* hbm 文件的屬性實(shí)現(xiàn) net.sf.hibernate.met
42、adata.* PO 的 Meta 實(shí)現(xiàn) net.sf.hibernate.odmg.* ODMG 是一個(gè) ORM 標(biāo)準(zhǔn),這個(gè)包是 ODMG 標(biāo)準(zhǔn)的 實(shí)現(xiàn)類 net.sf.hibernate.persister.* 核心包,實(shí)現(xiàn)持久對(duì)象和表之間的映射 xy.* Proxy 和 Lazy Loading 支持 net.sf.hibernate.ps* 該包是 PreparedStatment Cache net.sf.hibernate.sql.* 生成 JDBC sql 語(yǔ)句的包 net.sf.hibernate.test.* 測(cè)試類,你可以用 juni
43、t 來(lái)測(cè)試 Hibernate net.sf.hibernate.tool.hbm2ddl.* 用 hbm 配置文件生成 DDL n et.sf.hiber nate.tra nsact ion.* Hibernate Tran sactio n 實(shí)現(xiàn)類 net.sf.hibernate.type.* Hibernate中定義的持久對(duì)象的屬性的數(shù)據(jù)類型 n et.sf.hibernate.util.*一些工具類,作用比較散 net.sf.hibernate.xml.* XML 數(shù)據(jù)綁定 14. 緩存管理 Hibernate中提供了兩級(jí)Cache,第一級(jí)別的緩存是Session級(jí)別的緩存,它是
44、屬于事務(wù)范圍的緩存。這一級(jí)別的緩存由hibernate管理的,一般情況下無(wú)需進(jìn)行 干預(yù);第二級(jí)別的緩存是 Sessio nFactory級(jí)別的緩存,它是屬于進(jìn)程范圍或群集范圍的緩存。這一級(jí)別的緩 存可以進(jìn)行配置和更改,并且可以動(dòng)態(tài)加載和卸載。Hibernate還為查詢結(jié)果提供 了一個(gè)查詢緩存,它依賴于 第二級(jí)緩存。 1. 一級(jí)緩存和二級(jí)緩存的比較:第一級(jí)緩存第二級(jí)緩存存放數(shù)據(jù)的形式相互 關(guān)聯(lián)的持久化對(duì)象對(duì)象的散裝數(shù)據(jù)緩存的范圍事務(wù)范圍,每個(gè)事務(wù)都有單獨(dú)的第 一級(jí)緩存進(jìn)程范圍或集 群范圍,緩存被同一個(gè)進(jìn)程或集群范圍內(nèi)的所有事務(wù)共享并發(fā)訪問(wèn)策略由于每個(gè) 事務(wù)都擁有單獨(dú)的第一級(jí)緩存,不會(huì)出現(xiàn)并發(fā)問(wèn)題
45、,無(wú)需提供并發(fā)訪問(wèn)策略由于多 個(gè)事務(wù)會(huì)同時(shí)訪問(wèn)第二級(jí)緩 存中相同數(shù)據(jù),因此必須提供適當(dāng)?shù)牟l(fā)訪問(wèn)策略,來(lái)保證特定的事務(wù)隔離級(jí)別 數(shù)據(jù)過(guò)期策略沒(méi)有提供數(shù)據(jù)過(guò)期策略。處于一級(jí)緩存中的對(duì)象永遠(yuǎn)不會(huì)過(guò)期,除非 應(yīng)用程序顯式清空緩存或者 清除特定的對(duì)象必須提供數(shù)據(jù)過(guò)期策略,如基于內(nèi)存的緩存中的對(duì)象的最大數(shù)目, 允許對(duì)象處于緩存中的最長(zhǎng)時(shí)間,以及允許對(duì)象處于緩存中的最長(zhǎng)空閑時(shí)間物理 存儲(chǔ)介質(zhì)內(nèi)存內(nèi)存和硬盤。 對(duì)象的散裝數(shù)據(jù)首先存放在基于內(nèi)在的緩存中,當(dāng)內(nèi)存中對(duì)象的數(shù)目達(dá)到數(shù)據(jù)過(guò)期 策略中指定上限時(shí),就會(huì)把其余的對(duì)象寫入基于硬盤的緩存中。緩存的軟件實(shí)現(xiàn) 在 Hibernate的 Session的實(shí) 現(xiàn)中包含
46、了緩存的實(shí)現(xiàn)由第三方提供,Hibernate僅提供了緩存適配器 (CacheProvide。用于把特定的緩存插件集成到 Hibernate中。啟用緩存的方式只要 應(yīng)用程序通過(guò)Session接口來(lái)執(zhí)行保存 、更新、刪除、加載和查詢數(shù)據(jù)庫(kù)數(shù)據(jù)的操作, Hibernate就會(huì)啟用第一級(jí)緩存, 把數(shù)據(jù)庫(kù)中的數(shù)據(jù)以對(duì)象的形式拷貝到緩存中,對(duì)于批量更新和批量刪除操作,如 果不希望啟用第一級(jí)緩存, 可以繞過(guò)Hibernate API,直接通過(guò)JDBC API來(lái)執(zhí)行指操作。用戶可以在單個(gè)類 或類的單個(gè)集合的粒度上配置第二級(jí)緩存。如果類的實(shí)例被經(jīng)常讀但很少被修改, 就可以考慮使用第二級(jí)緩存。 只有為某個(gè)類或集合
47、配置了第二級(jí)緩存,Hibernate在運(yùn)行時(shí)才會(huì)把它的實(shí)例加入 到第二級(jí)緩存中。用戶管理緩存的方式第一級(jí)緩存的物理介質(zhì)為內(nèi)存,由于內(nèi)存 容量有限,必須通過(guò)恰當(dāng)?shù)臋z 索策略和檢索方式來(lái)限制加載對(duì)象的數(shù)目。Session的evit(方法可以顯式清空緩存 中特定對(duì)象,但這種方法不值得推薦。第二級(jí)緩存的物理介質(zhì)可以是內(nèi)存和硬 盤,因此第二級(jí)緩存可以存放 大量的數(shù)據(jù),數(shù)據(jù)過(guò)期策略的 maxEleme ntsln Memory屬性值可以控制內(nèi)存中的對(duì) 象數(shù)目。管理第二級(jí)緩存主要包括兩個(gè)方面:選擇需要使用第二級(jí)緩存的持久類, 設(shè)置合適的并發(fā)訪問(wèn)策略:選 擇緩存適配器,設(shè)置合適的數(shù)據(jù)過(guò)期策略。 2. 一級(jí)緩存
48、的管理:當(dāng)應(yīng)用程序調(diào)用Session的save(、update、 savaeOrUpdate( get(或 load(,以及調(diào)用查詢接口的 list( iterate(或 filter(方法時(shí), 如果在Session緩存 中還不存在相應(yīng)的對(duì)象,Hibernate就會(huì)把該對(duì)象加入到第一級(jí)緩存中。當(dāng)清理緩 存時(shí),Hibernate會(huì)根據(jù)緩存中對(duì)象的狀態(tài)變化來(lái)同步更新數(shù)據(jù)庫(kù)。Session為應(yīng)用 程序提供了兩個(gè)管理緩存的 方法:evict(Object obj :從緩存中清除參數(shù)指定的持久化對(duì)象。clear(:清空緩存 中所有持久化對(duì)象。 3. 二級(jí)緩存的管理: 3.1. Hibernate的二級(jí)緩
49、存策略的一般過(guò)程如下: 1條件查詢的時(shí)候,總是發(fā)出一條 select * from table_name where(選擇所 有字段)這樣的SQL語(yǔ)句查詢數(shù)據(jù)庫(kù),一次獲得所有的數(shù)據(jù)對(duì)象。 2把獲得的所有數(shù)據(jù)對(duì)象根據(jù)ID放入到第二級(jí)緩存中。 3當(dāng)Hibernate根據(jù)ID訪問(wèn)數(shù)據(jù)對(duì)象的時(shí)候,首先從 Session一級(jí)緩存中查; 查不到,如果配置了二級(jí)緩存,那么從二級(jí)緩存中查;查不到,再查詢數(shù)據(jù)庫(kù),把 結(jié)果按照ID放入到緩存。 4刪除、更新、增加數(shù)據(jù)的時(shí)候,同時(shí)更新緩存。 Hibernate的二級(jí)緩存策略,是針對(duì)于ID查詢的緩存策略,對(duì)于條件查詢則毫 無(wú)作用。為此,Hibernate提供了針對(duì)條件
50、查詢的 Query Caches 32什么樣的數(shù)據(jù)適合存放到第二級(jí)緩存中? 1很少被修改的數(shù)據(jù)2不是很重 要的數(shù)據(jù),允許出現(xiàn)偶爾并發(fā)的數(shù)據(jù) 3不會(huì)被并發(fā)訪問(wèn)的數(shù)據(jù)4參考數(shù)據(jù),指的是 供應(yīng)用參考的常量數(shù)據(jù) ,它的實(shí)例數(shù)目有限,它的實(shí)例會(huì)被許多其他類的實(shí)例引用,實(shí)例極少或者從來(lái)不 會(huì)被修改。 3.3. 不適合存放到第二級(jí)緩存的數(shù)據(jù)?1經(jīng)常被修改的數(shù)據(jù)2財(cái)務(wù)數(shù)據(jù),絕對(duì) 不允許出現(xiàn)并發(fā)3與其他應(yīng)用共享的數(shù)據(jù)。 3.4. 常用的緩存插件Hibernater的二級(jí)緩存是一個(gè)插件,下面是幾種常用的緩 存插件: EhCache可作為進(jìn)程范圍的緩存,存放數(shù)據(jù)的物理介質(zhì)可以是內(nèi)存或硬盤, 對(duì)Hibernate的查
51、詢緩存提供了支持。 OSCache可作為進(jìn)程范圍的緩存,存放數(shù)據(jù)的物理介質(zhì)可以是內(nèi)存或硬盤, 提供了豐富的緩存數(shù)據(jù)過(guò)期策略,對(duì)Hibernate的查詢緩存提供了支持。 SwarmCache可作為群集范圍內(nèi)的緩存,但不支持Hibernate的查詢緩存。 JBossCache可作為群集范圍內(nèi)的緩存,支持事務(wù)型并發(fā)訪問(wèn)策略,對(duì) Hibernate的查詢緩存提供了支持。 3.5. 配置二級(jí)緩存的主要步驟: 1選擇需要使用二級(jí)緩存的持久化類,設(shè)置它的命名緩存的并發(fā)訪問(wèn)策略。這 是最值得認(rèn)真考慮的步驟。 2選擇合適的緩存插件,然后編輯該插件的配置文件。 15. 如何優(yōu)化 Hibernate? 1使用雙向一
52、對(duì)多關(guān)聯(lián),不使用單向一對(duì)多 2. 不用一對(duì)一,用多對(duì)一取代 3. 配置對(duì)象緩存,不使用集合緩存 16. hibernate中 get(與 load(區(qū)別 請(qǐng)注意如果沒(méi)有匹配的數(shù)據(jù)庫(kù)記錄,load(方法可能拋出無(wú)法恢復(fù)的異常 (unrecoverable exception 如果類的映射使用了代理(proxy,load(方法會(huì)返回一個(gè) 未初始化的代理,直到你調(diào)用該代理的某方法時(shí)才會(huì)去訪問(wèn)數(shù)據(jù)庫(kù)。若你希望在 某對(duì)象中創(chuàng)建一個(gè)指向另一個(gè)對(duì)象的關(guān)聯(lián),又不想在從數(shù)據(jù)庫(kù)中裝載該對(duì)象時(shí)同時(shí) 裝載相關(guān)聯(lián)的那個(gè)對(duì)象,那么這種操作方式就用得上的了。如果為相應(yīng)類映射關(guān) 系設(shè)置了 batch-size,那么使用這種操
53、作方式允許多個(gè)對(duì)象被一批裝載(因?yàn)榉祷?的是代理,無(wú)需從數(shù)據(jù)庫(kù)中抓取所有對(duì)象的數(shù)據(jù))。如果你不確定是否有匹配的 行存在,應(yīng)該使用get(方法,它會(huì)立刻訪問(wèn)數(shù)據(jù)庫(kù),如果沒(méi)有對(duì)應(yīng)的行,會(huì)返回 null。 17. 什么是Hibernate延遲加載? 延遲加載機(jī)制是為了避免一些無(wú)謂的性能開(kāi)銷而提出來(lái)的,所謂延遲加載就是當(dāng)在 真正需要數(shù)據(jù)的時(shí)候,才真正執(zhí)行數(shù)據(jù)加載操作。在Hibernate中提供了對(duì)實(shí)體對(duì) 象的延遲加載以及對(duì)集合的延遲加載,另外在Hibernate3中還提供了對(duì)屬性的延遲 加載 三.Spring 1你一般用spring做什么? 控制反轉(zhuǎn)IOC AOP 2.spri ng是什么?根據(jù)你的理
54、解詳細(xì)談?wù)勀愕囊?jiàn)解。 目的:解決企業(yè)應(yīng)用開(kāi)發(fā)的復(fù)雜性 功能:使用基本的JavaBean代替EJB,并提供了更多的企業(yè)應(yīng)用功能 范圍:任何Java應(yīng)用 簡(jiǎn)單來(lái)說(shuō),Spring是一個(gè)輕量級(jí)的控制反轉(zhuǎn)(IoC和面向切面(AOP的容器框 架。 輕量 從大小與開(kāi)銷兩方面而言Spring都是輕量的。完整的Spring框架 可以在一個(gè)大小只有1MB多的JAR文件里發(fā)布。并且Spring所需的處理開(kāi)銷也是 微不足道的。此外,Spring是非侵 入式的:典型地,Spring應(yīng)用中的對(duì)象不依賴于 Spring的特定類。 控制反轉(zhuǎn)Spring通過(guò)一種稱作控制反轉(zhuǎn)(IoC)的技術(shù)促進(jìn)了松耦合。 當(dāng)應(yīng)用了 IoC,一個(gè)
55、對(duì)象依賴的其它對(duì)象會(huì)通過(guò)被動(dòng)的方式傳遞進(jìn)來(lái),而不是這個(gè) 對(duì)象自己創(chuàng)建或者查找依賴對(duì) 象。你可以認(rèn)為IoC與JNDI相反一一不是對(duì)象從容器中查找依賴,而是容器在對(duì) 象初始化時(shí)不等對(duì)象請(qǐng)求就主動(dòng)將依賴傳遞給它。 面向切面 Spring提供了面向切面編程的豐富支持,允許通過(guò)分離應(yīng)用的 業(yè)務(wù)邏輯與系統(tǒng)級(jí)服務(wù)(例如審計(jì)(auditi ng)和事務(wù)()管理)進(jìn)行內(nèi)聚性的開(kāi) 發(fā)。應(yīng)用對(duì)象只實(shí)現(xiàn)它們應(yīng) 該做的一一完成業(yè)務(wù)邏輯一一僅此而已。它們并不負(fù)責(zé)(甚至是意識(shí))其它的系統(tǒng) 級(jí)關(guān)注點(diǎn),例如日志或事務(wù)支持。 容器一一Spring包含并管理應(yīng)用對(duì)象的配置和生命周期,在這個(gè)意義上它是 一種容器,你可以配置你的每個(gè)
56、bean如何被創(chuàng)建基于一個(gè)可配置原型 (prototype),你的bean可以創(chuàng)建 一個(gè)單獨(dú)的實(shí)例或者每次需要時(shí)都生成一個(gè)新的實(shí)例一一以及它們是如何相互關(guān)聯(lián) 的。然而,Spring不應(yīng)該被混同于傳統(tǒng)的重量級(jí)的 EJB容器,它們經(jīng)常是龐大與笨 重的,難以使用。 框架 Spring可以將簡(jiǎn)單的組件配置、組合成為復(fù)雜的應(yīng)用。在 Spri ng 中,應(yīng)用對(duì)象被聲明式地組合,典型地是在一個(gè) XML文件里。Spring也提供了很 多基礎(chǔ)功能(事務(wù)管理、持久化 框架集成等等),將應(yīng)用邏輯的開(kāi)發(fā)留給了你。 所有Spring的這些特征使你能夠編寫更干凈、更可管理、并且更易于測(cè)試的 代碼。它們也為Spring中的
57、各種模塊提供了基礎(chǔ)支持。 3. 項(xiàng)目中如何體現(xiàn)Spring中的切面編程,具體說(shuō)明。 面向切面編程:主要是橫切一個(gè)關(guān)注點(diǎn),將一個(gè)關(guān)注點(diǎn)模塊化成一個(gè)切面。在切面 上聲明一個(gè)通知(Advice和切入點(diǎn)(Pointcut;通知:是指在切面的某個(gè)特定的連接點(diǎn) (代表一個(gè)方法的執(zhí) 行。通過(guò)聲明一個(gè)org.aspectj.lang.JoinPoint類型的參數(shù)可以使通知(Advice)的主 體部分獲得連接點(diǎn)信息。上執(zhí)行的動(dòng)作。通知中定義了要插入的方法。切入點(diǎn):切 入點(diǎn)的內(nèi)容是一個(gè)表 達(dá)式,以描述需要在哪些對(duì)象的哪些方法上插入通知中定義的方法。 項(xiàng)目中用到的Spring中的切面編程最多的地方:聲明式事務(wù)管理。 a定義一個(gè)事務(wù)管理器 b、配置事務(wù)特性(相當(dāng)于聲明通知。一般在業(yè)務(wù)層的類的一些方法上定義事務(wù) c、配置哪些類的哪些方法需要配置事務(wù)(相當(dāng)于切入點(diǎn)。一般是業(yè)務(wù)類的方法上 4. spri ng在項(xiàng)目中如何充當(dāng)粘合劑 1、在項(xiàng)目中利用spring的IOC(控制反轉(zhuǎn)或依賴注入,明確地定義組件接口(如 UserDAO,開(kāi)發(fā)者可以獨(dú)立開(kāi)發(fā)各個(gè)組件,然后根據(jù)組件間的依賴關(guān)系組裝 (UserAction 依
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2023年有害垃圾項(xiàng)目成效分析報(bào)告
- 2023年戶外照明燈具項(xiàng)目綜合評(píng)估報(bào)告
- 2024年童書(shū)項(xiàng)目評(píng)估分析報(bào)告
- 2023年出境旅游服務(wù)項(xiàng)目評(píng)估分析報(bào)告
- 2023年半柔半剛射頻同軸電纜項(xiàng)目綜合評(píng)估報(bào)告
- 2024至2030年中國(guó)男式休閑包數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 2024至2030年防靜電工鞋項(xiàng)目投資價(jià)值分析報(bào)告
- 2024至2030年軟抄簿項(xiàng)目投資價(jià)值分析報(bào)告
- 2024至2030年中國(guó)沖壓汽車零件行業(yè)投資前景及策略咨詢研究報(bào)告
- 四川小區(qū)前期物業(yè)服務(wù)合同2024年
- GB/T 44672-2024體外診斷醫(yī)療器械建立校準(zhǔn)品和人體樣品賦值計(jì)量溯源性的國(guó)際一致化方案的要求
- 新人教版七年級(jí)上冊(cè)生物全冊(cè)知識(shí)點(diǎn)(期末復(fù)習(xí)用)
- 2023烏魯木齊法院書(shū)記員真題
- 金屬切削原理與刀具夏云才課后參考答案
- 2024年江蘇南通市如皋市有線如皋分公司招聘筆試參考題庫(kù)含答案解析
- 記敘文閱讀:小說(shuō)-2023年中考語(yǔ)文復(fù)習(xí)練(江蘇)(解析版)
- 提高生產(chǎn)流程效率加快產(chǎn)品交付速度
- 2023年高素質(zhì)農(nóng)民糧經(jīng)專業(yè)結(jié)業(yè)試題
- 新三板知識(shí)測(cè)評(píng)答案
- 注冊(cè)物業(yè)管理師考試歷年真題及答案
- 了不起的蓋茨比經(jīng)典臺(tái)詞
評(píng)論
0/150
提交評(píng)論