版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、introducing to spring framework(中文修訂版)作者: rod johnson 譯者: yanger,taowen 校對(duì): taowen 關(guān)于 spring framework,今年夏天你可能已經(jīng)聽見很多的議論。在本文中, 我將試圖解釋 spring 能完成什么,和我怎么會(huì)認(rèn)為它能幫助你開發(fā)j2ee應(yīng)用程序。又來(lái)一個(gè) framework ?你可能正在想“不過(guò)是另外一個(gè)的framework”。當(dāng)已經(jīng)有許多開放源代碼( 和專有) j2ee framework時(shí),為什么你還要耐下心子讀這篇文章或去下載spring framework?我相信 spring 是獨(dú)特的,有幾個(gè)
2、原因:list 它關(guān)注的領(lǐng)域是其他許多流行的framework未曾關(guān)注的。 spring 要提供的是一種管理你的業(yè)務(wù)對(duì)象的方法。spring 既是全面的又是模塊化的。spring 有分層的體系結(jié)構(gòu),這意味著你能選擇僅僅使用它任何一個(gè)獨(dú)立的部分,而它的架構(gòu)又是內(nèi)部一致。 因此你能從你的學(xué)習(xí)中,得到最大的價(jià)值。例如,你可能選擇僅僅使用spring 來(lái)簡(jiǎn)單化 jdbc的使用,或用來(lái)管理所有的業(yè)務(wù)對(duì)象。它的設(shè)計(jì)從一開始就是要幫助你編寫易于測(cè)試的代碼。spring 是使用測(cè)試驅(qū)動(dòng)開發(fā)的工程的理想框架。/list:u spring 不會(huì)給你的工程添加對(duì)其他的框架依賴。spring 也許稱得上是個(gè)一站式解決
3、方案,提供了一個(gè)典型應(yīng)用所需要的大部分基礎(chǔ)架構(gòu)。它還涉及到了其他framework 沒(méi)有考慮到的內(nèi)容。盡管它僅僅是一個(gè)從2003 年 2 月才開始的開源項(xiàng)目, 但 spring 有深厚的歷史根基。這個(gè)開源工程是起源自我在2002 年晚些時(shí)候出版的 expert one-on-one j2ee設(shè)計(jì)與開發(fā)書中的基礎(chǔ)性代碼。這本書展示了spring 背后的基礎(chǔ)性架構(gòu)思想。然而,對(duì)這個(gè)基礎(chǔ)架構(gòu)的概念可以追溯到2000年的早些時(shí)候 , 并且反映了我為一系列商業(yè)工程開發(fā)基礎(chǔ)結(jié)構(gòu)的成功經(jīng)驗(yàn)。2003年 1 月,spring 已經(jīng)落戶于 sourceforge 上了?,F(xiàn)在有 10 個(gè)開發(fā)人員, 其中 6 個(gè)是
4、高度投入的積極分子。spring 架構(gòu)上的好處在我們進(jìn)入細(xì)節(jié)之前,讓我們來(lái)看看spring 能夠給工程帶來(lái)的種種好處:list spring 能有效地組織你的中間層對(duì)象,不管你是否選擇使用了ejb 。如果你僅僅使用了 struts或其他為 j2ee的 api 特制的 framework,spring 致力于解決剩下的問(wèn)題。spring 能消除在許多工程中常見的對(duì)singleton的過(guò)多使用。根據(jù)我的經(jīng)驗(yàn),這是一個(gè)很大的問(wèn)題,它降低了系統(tǒng)的可測(cè)試性和面向?qū)ο蟮某潭?。通過(guò)一種在不同應(yīng)用程序和項(xiàng)目間一致的方法來(lái)處理配置文件,spring 能消除各種各樣自定義格式的屬性文件的需要。曾經(jīng)對(duì)某個(gè)類要尋找的
5、是哪個(gè)魔法般的屬性項(xiàng)或系統(tǒng)屬性感到不解,為此不得不去讀javadoc 甚至源編碼?有了spring ,你僅僅需要看看類的javabean屬性。inversion of control 的使用(在下面討論)幫助完成了這種簡(jiǎn)化。通過(guò)把對(duì)接口編程而不是對(duì)類編程的代價(jià)幾乎減少到?jīng)]有,spring 能夠促進(jìn)養(yǎng)成好的編程習(xí)慣。spring 被設(shè)計(jì)為讓使用它創(chuàng)建的應(yīng)用盡可能少的依賴于他的apis。在 spring應(yīng)用中的大多數(shù)業(yè)務(wù)對(duì)象沒(méi)有依賴于spring 。使用 spring 構(gòu)建的應(yīng)用程序易于單元測(cè)試。spring 能使 ejb的使用成為一個(gè)實(shí)現(xiàn)選擇, 而不是應(yīng)用架構(gòu)的必然選擇。你能選擇用 pojos
6、或 local ejbs來(lái)實(shí)現(xiàn)業(yè)務(wù)接口,卻不會(huì)影響調(diào)用代碼。spring 幫助你解決許多問(wèn)題而無(wú)需使用ejb 。spring 能提供一種 ejb的替換物,它們適用于許多 web應(yīng)用。例如, spring 能使用 aop 提供聲明性事務(wù)管理而不通過(guò) ejb容器, 如果你僅僅需要與單個(gè)數(shù)據(jù)庫(kù)打交道, 甚至不需要一個(gè) jta實(shí)現(xiàn)。spring 為數(shù)據(jù)存取提供了一個(gè)一致的框架, 不論是使用的是 jdbc還是 o/r mapping產(chǎn)品(如 hibernate )。/list:u spring 確實(shí)使你能通過(guò)最簡(jiǎn)單可行的解決辦法來(lái)解決你的問(wèn)題。而這是有有很大價(jià)值的。spring 做了些什么?spring
7、 提供許多功能,在此我將依次快速地展示其各個(gè)主要方面。任務(wù)描述首先, 讓我們明確 spring 范圍。盡管 spring 覆蓋了許多方面,但我們對(duì)它應(yīng)該涉什么,什么不應(yīng)該涉及有清楚的認(rèn)識(shí)。spring 的主要目的是使 j2ee易用和促進(jìn)好編程習(xí)慣。spring 不重新輪子。因此,你發(fā)現(xiàn)在spring 中沒(méi)有 logging ,沒(méi)有連接池,沒(méi)有分布式事務(wù)調(diào)度。所有這些東西均有開源項(xiàng)目提供( 例如我們用于處理所有日志輸出的 commons logging以及 commons dbcp),或由你的應(yīng)用程序服務(wù)器提供了。出于同樣的的原因,我們沒(méi)有提供o/r mapping層。對(duì)于這個(gè)問(wèn)題已經(jīng)有了像 h
8、ibernate 和 jdo這樣的優(yōu)秀解決方案。spring 的目標(biāo)就是讓已有的技術(shù)更加易用。例如,盡管我們沒(méi)有底層事務(wù)協(xié)調(diào)處理,但我們提供了一個(gè)抽象層覆蓋了jta或任何其他的事務(wù)策略。spring 沒(méi)有直接和其他的開源項(xiàng)目競(jìng)爭(zhēng),除非我們感到我們能提供新的一些東西。例如,象許多開發(fā)人員一樣,我們從來(lái)沒(méi)有對(duì)struts感到高興過(guò),并且覺(jué)得到在 mvc web framework中還有改進(jìn)的余地。在某些領(lǐng)域,例如輕量級(jí)的ioc容器和 aop 框架, spring 確實(shí)有直接的競(jìng)爭(zhēng),但是在這些領(lǐng)域還沒(méi)有已經(jīng)較為流行的解決方案。 (spring 在這些領(lǐng)域是開路先鋒。) spring 也得益于內(nèi)在的一
9、致性。所有的開發(fā)者都在唱同樣的的贊歌,基礎(chǔ)想法依然與 expert one-on-one j2ee設(shè)計(jì)與開發(fā)中提出的差不多。并且我們已經(jīng)能夠在多個(gè)領(lǐng)域中使用一些中心的概念,例如inversion of control。spring 在應(yīng)用服務(wù)器之間是可移植的。當(dāng)然保證可移植性總是一種挑戰(zhàn),但是我們避免使用任何平臺(tái)特有或非標(biāo)準(zhǔn)的東西,并且支持在weblogic,tomcat,resin,jboss,websphere 和其他的應(yīng)用服務(wù)器上的用戶。inversion of control 容器spring 設(shè)計(jì)的核心是 org.springframework.beans 包, 它是為與 javab
10、eans一起工作而設(shè)計(jì)的。這個(gè)包一般不直接被用戶使用,而是作為許多其他功能的基礎(chǔ)。下一個(gè)層面高一些的抽象是bean factory。一個(gè) spring bean factory 是一個(gè)通用的 factory ,它使對(duì)象能夠按名稱獲取,并且能管理對(duì)象之間的關(guān)系。bean factories 支持兩種模式的對(duì)象:list singleton :在此模式中,有一個(gè)具有特定名稱的共享對(duì)象實(shí)例,它在查找時(shí)被獲取。這是默認(rèn)的, 而且是最為經(jīng)常使用的。 它對(duì)于無(wú)狀態(tài)對(duì)象是一種理想的模式。prototype :在此模式中,每次獲取將創(chuàng)建一個(gè)獨(dú)立的對(duì)象。例如,這可以被用于讓用戶擁有他們自己的對(duì)象。/list:u
11、 由于 org.springframwork.beans.factory.beanfactory是一個(gè)簡(jiǎn)單的接口, 它能被大量底層存儲(chǔ)方法實(shí)現(xiàn)。你能夠方便地實(shí)現(xiàn)你自己的beanfactory ,盡管很少用戶需要這么做。最為常用的beanfactory 定義是:list xmlbeanfactory: 可解析簡(jiǎn)單直觀的定義類和命名對(duì)象屬性的xml結(jié)構(gòu)。 我們提供了一個(gè) dtd來(lái)使編寫更容易。listablebeanfactoryimpl:提供了解析存放在屬性文件中的bean定義的能力,并且可通過(guò)編程創(chuàng)建beanfactories 。/list:u 每個(gè) bean 定義可能是一個(gè) pojo (通過(guò)
12、類名和 javabean初始屬性定義),或是一個(gè) factorybean 。factorybean 接口添加了一個(gè)間接層。通常,這用于創(chuàng)建使用 aop 或其他方法的代理對(duì)象: 例如,添加聲明性事務(wù)管理的代理。 (這在概念上和 ejb的 interception相似,但實(shí)現(xiàn)得更簡(jiǎn)單。)beanfactories 能在一個(gè)層次結(jié)構(gòu)中選擇性地參與,繼承 ancestor (祖先)的定義。這使得在整個(gè)應(yīng)用中公共配置的共享成為可能,雖然個(gè)別資源,如controller servlets,還擁有他們自己的獨(dú)立的對(duì)象集合。這種使用 javabeans的動(dòng)機(jī)在 expert one-on-one j2ee d
13、esign and development的第四章中有描述,在theserverside 網(wǎng)站上的有免費(fèi)的pdf版本(http:/ 。通過(guò) beanfactory 概念, spring 成為一個(gè) inversion of control的容器。 ( 我不怎么喜歡 container這個(gè)詞,因?yàn)樗谷寺?lián)想到重量級(jí)容器,如ejb容器。spring 的 beanfactory 是一個(gè)可通過(guò)一行代碼創(chuàng)建的容器,并且不需要特殊的部署步驟。 ) inversion of control 背后的概念經(jīng)常表述為hollywood 原則的:“don t call me , i ll call you?!?ioc
14、 將控制創(chuàng)建的職責(zé)搬進(jìn)了框架中,并把它從應(yīng)用代碼脫離開來(lái)。 涉及到配置的地方, 意思是說(shuō)在傳統(tǒng)的容器體系結(jié)構(gòu)中,如 ejb ,一個(gè)組件可以調(diào)用容器并問(wèn)“我需要它給我做工作的對(duì)象x在哪里?”; 使用 ioc容器則只需指出組件需要x對(duì)象,在運(yùn)行時(shí)容器會(huì)提供給它。 容器是通過(guò)查看方法的參數(shù)表(例如javabean的屬性)做到的,也可能根據(jù)配置數(shù)據(jù)如xml 。ioc 有幾個(gè)重要的好處,例如:list 因?yàn)榻M件不需要在運(yùn)行時(shí)間尋找合作者,所以他們可以更簡(jiǎn)單的編寫和維護(hù)。在spring 版的 ioc 里,組件通過(guò)暴露javabean的 setter方法表達(dá)他們依賴的其他組件。這相當(dāng)于ejb通過(guò) jndi
15、來(lái)查找, ejb查找需要開發(fā)人員編寫代碼。同樣原因,應(yīng)用代碼更容易測(cè)試。javabean屬性是簡(jiǎn)單的,屬于java 核心的,并且是容易測(cè)試的: 僅編寫一個(gè)自包含的junit 測(cè)試方法用來(lái)創(chuàng)建對(duì)象和設(shè)置相關(guān)屬性即可。一個(gè)好的 ioc 實(shí)現(xiàn)保留了強(qiáng)類型。 如果你需要使用一個(gè)通用的factory來(lái)尋找合作者,你必須通過(guò)類型轉(zhuǎn)換將返回結(jié)果轉(zhuǎn)變?yōu)橄胍念愋?。這不是一個(gè)大不了的問(wèn)題,但是不雅觀。使用ioc,你在你的代碼中表達(dá)了強(qiáng)類型依賴,框架將負(fù)責(zé)類型轉(zhuǎn)換。這意味著在框架配置應(yīng)用時(shí), 類型不匹配將導(dǎo)致錯(cuò)誤; 在你的代碼中,你無(wú)需擔(dān)心類型轉(zhuǎn)換異常。大部分業(yè)務(wù)對(duì)象不依賴于ioc 容器的 apis。這使得很容易
16、使用遺留下來(lái)的代碼,且很容易的使用對(duì)象無(wú)論在容器內(nèi)或不在容器內(nèi)。例如,spring 用戶經(jīng)常配置jakarta commons dbcp 數(shù)據(jù)源為一個(gè) spring bean:不需要些任何定制代碼去做這件事。我們說(shuō)一個(gè) ioc 容器不是侵入性的: 使用它并不會(huì)使你的代碼依賴于它的 apis。任何 javabean在 spring bean factory中都能成為一個(gè)組件。/list:u 最后應(yīng)該強(qiáng)調(diào)的是, ioc 不同于傳統(tǒng)的容器的體系結(jié)構(gòu),如ejb ,應(yīng)用代碼最小程度地依靠于容器。這意味著你的業(yè)務(wù)對(duì)象可以潛在的被運(yùn)行在不同的ioc 框架上或者在任何框架之外不需要任何代碼的改動(dòng)。以我和其他
17、spring 用戶的經(jīng)驗(yàn)來(lái)說(shuō),再怎么強(qiáng)調(diào)ioc 給應(yīng)用程序代碼帶來(lái)的好處也不為過(guò)。ioc 不是一個(gè)新概念,但是它在j2ee團(tuán)體里面剛剛到達(dá)黃金時(shí)間。有一些可供選擇的 ioc 容器: 例如 apache avalon, picocontainer 和 hivemind 。avalon 從沒(méi)怎么流行,盡管它很強(qiáng)大而且有很長(zhǎng)的歷史。avalon 相當(dāng)?shù)闹睾蛷?fù)雜,并且看起來(lái)比新的 ioc 解決方案更具侵入性。 picocontainer是一個(gè)輕量級(jí)而且更強(qiáng)調(diào)通過(guò)構(gòu)造函數(shù)表達(dá)依賴性而不是javabean 屬性。 與 spring 不同,它的設(shè)計(jì)允許每個(gè)類型一個(gè)對(duì)象的定義( 可能是因?yàn)樗芙^任何java
18、代碼外的元數(shù)據(jù)導(dǎo)致的局限性 )。在 spring , picocontainer 和其他 ioc frameworks 之間做比較,可參看文章spring 網(wǎng)站上的 the spring framework - a lightweight container 位于/docs/lightweight_container.html。 這個(gè)頁(yè)面里面包含了 picocontainer站點(diǎn)的鏈接。spring beanfactories 是非常輕量級(jí)的。 用戶已經(jīng)成功地將他們應(yīng)用在applets和單獨(dú)的 swing 應(yīng)用中。 (它們也很好地工作在
19、ejb容器中。 ) 沒(méi)有特殊的部署步驟和察覺(jué)得到的啟動(dòng)時(shí)間。 這個(gè)能力表明一個(gè)容器在應(yīng)用的任何層面幾乎立即可以發(fā)揮非常大的價(jià)值。spring beanfactory 概念貫穿于 spring 始終, 而且是 spring 如此內(nèi)在一致的關(guān)鍵原因。在 ioc 容器中, spring 也是唯一的,它使用ioc 作為基礎(chǔ)概念貫穿于整個(gè)功能豐富的框架。對(duì)應(yīng)用開發(fā)人員, 最重要的是,一個(gè)或多個(gè) beanfactory 提供了一個(gè)定義明確的業(yè)務(wù)對(duì)象層。這類似于local session bean層,但比它更簡(jiǎn)單。與ejbs不同,在這個(gè)層中的對(duì)象可能是相關(guān)的,并且他們的關(guān)系被擁有它們的factory管理。有
20、一個(gè)定義明確的業(yè)務(wù)對(duì)象層對(duì)于成功的體系結(jié)構(gòu)是非常重要的。spring applicationcontext 是 beanfactory 的子接口,為下列東西提供支持:list 信息查找,支持著國(guó)際化事件機(jī)制,允許發(fā)布應(yīng)用對(duì)象以及可選的注冊(cè)以接收到事件可移植的文件和資源訪問(wèn)/list:u xmlbeanfactory 例子spring 用戶通常在 xml的“bean 定義”文件中配置他們的應(yīng)用。spring 的 xml bean定義文檔的根是 元素。該元素包含一個(gè)或多個(gè) 定義。我們一般給每個(gè) bean 定義的指定類和屬性。 我們還必須指定 id 作為標(biāo)識(shí), 這將成為在代碼中使用該 bean 的名
21、字。讓我們來(lái)看一個(gè)簡(jiǎn)單的例子,它配置了三個(gè)應(yīng)用程序?qū)ο?,之間的關(guān)系在j2ee應(yīng)用中常常能夠看到:list j2ee datasource 使用 datasource 的 dao 在處理過(guò)程中使用dao 的業(yè)務(wù)對(duì)象/list:u 在下面的例子中,我們使用一個(gè)來(lái)自jakarta commons dbcp 項(xiàng)目的basicdatasource 。這個(gè) class (和其他許多已有的class 一樣)可以簡(jiǎn)單地被應(yīng)用在 spring bean factory中,只要它提供了javabean格式的配置。需要在shutdown 時(shí)被調(diào)用的 close 方法可通過(guò) spring 的destroy-metho
22、d屬性被注冊(cè),以避免 basicdatasource 需要實(shí)現(xiàn)任何 spring 的接口。java 代碼1. 2.3. 6. com.mysql.jdbc.driver 7. jdbc:mysql:/localhost:3306/mydb 8. root 9. basicdatasource 中我們感興趣的所有屬性都是string類型的,因此我們用 元素來(lái)指定他們的值。如果必要的話,spring 使用標(biāo)準(zhǔn)的 javabean 屬性編輯器機(jī)制來(lái)把string轉(zhuǎn)換為其他的類型?,F(xiàn)在, 我們定義 dao , 它有一個(gè)對(duì) datasource 的 bean引用。 bean間關(guān)系通過(guò) 元素來(lái)指定:jav
23、a 代碼1. 3. 4. 5.6. the business object has a reference to the dao, and an int property (exampleparam);: 7. 9. 10. 10 11. 12. 13. 對(duì)象間的關(guān)系一般在配置中明確地設(shè)置,象這個(gè)例子一樣。 我們認(rèn)為這樣做是件好事情。然而 spring 還提供了我們稱做 autowire的支持,一個(gè) la picocontainer ,其中它指出了 bean 間的依賴關(guān)系。這樣做的局限性picocontainer也是如此是如果有一個(gè)特殊類型的多個(gè)bean, 要確定那個(gè)類型所依賴的是哪個(gè)實(shí)例是不
24、可能。好的方面是,不滿足的依賴可以在factory初始化后被捕獲到。( spring 也為顯式的配置提供了一種可選的依賴檢查,它可以完成這個(gè)目的)在上面的例子中, 如果我們不想顯式的編寫他們的關(guān)系,可使用如下的 autowire特性:java 代碼1. 4.5. 10 6. 使用這個(gè)特性, spring 會(huì)找出 examplebusinessobject 的 datasource 屬性應(yīng)該被設(shè)置為在當(dāng)前 beanfactory 中找到的 datasource 實(shí)現(xiàn)。 在當(dāng)前的 beanfactory中,如果所需要類型的bean 不存在或多于一個(gè),將產(chǎn)生一個(gè)錯(cuò)誤。我們依然要設(shè)置 examplep
25、aram屬性,因?yàn)樗皇且粋€(gè)引用。autowire 支持和依賴檢查剛剛加入cvs并將在 spring 1.0 m2(到 10/20,2003)中提供。本文中所討論的所有其他特性都包含在當(dāng)前1.0 m1 版本中。把管理從 java 代碼中移出來(lái)比硬編碼有很大的好處,因?yàn)檫@樣可以只改變xml文件而無(wú)需改變一行java 代碼。例如,我們可以簡(jiǎn)單地改變mydatasource的bean定義引用不同的bean class 以使用別的連接池,或者一個(gè)用于測(cè)試的數(shù)據(jù)源。 xml節(jié)變成另一種,我們可以用spring 的 jndi location factorybean從應(yīng)用服務(wù)器獲取一個(gè)數(shù)據(jù)源?,F(xiàn)在讓我們來(lái)
26、看看例子中業(yè)務(wù)對(duì)象的java 代碼。注意下面列出的代碼中沒(méi)有對(duì)spring 的依賴。不像 ejb容器, spring beanfactory不具有侵入性:在應(yīng)用對(duì)象里面你通常不需要對(duì)spring 的存在硬編碼。java 代碼1. public class examplebusinessobject implements mybusinessobject 2.3. private exampledataaccessobject dao; 4. private int exampleparam; 5.6. public void setdataaccessobject(exampledataacc
27、essobject dao); 7. this.dao = dao; 8. 9.10. public void setexampleparam(int exampleparam); 11. this.exampleparam = exampleparam; 12. 13. 14. public void mybusinessmethod(); 15. / do stuff using dao 16. 17. 注意那些 property setter,它們對(duì)應(yīng)于 bean 定義文檔中的 xml引用。這些將在對(duì)象被使用之前由spring 調(diào)用。這些應(yīng)用程序的 bean 不需要依賴于 spring
28、:他們不需要實(shí)現(xiàn)任何spring 的接口或者繼承 spring 的類。他們只需要遵守 javabeans 的命名習(xí)慣。在 spring 應(yīng)用環(huán)境之外重用它們是非常簡(jiǎn)單的,例如,在一個(gè)測(cè)試環(huán)境中。 只需要用它們的缺省構(gòu)造函數(shù)實(shí)例化它們, 并且通過(guò)調(diào)用 setdatasource() 和 setexampleparam()手工設(shè)置它的屬性。 如果你想以一行代碼支持程序化的創(chuàng)建,只要你有一個(gè)無(wú)參數(shù)的構(gòu)造器,你就可以自由定義其他需要多個(gè)屬性的構(gòu)造函數(shù)。注意在業(yè)務(wù)接口中沒(méi)有聲明將會(huì)一起使用的javabean屬性。 他們是一個(gè)實(shí)現(xiàn)細(xì)節(jié)。我們可以“插入”帶有不同bean 屬性的不同的實(shí)現(xiàn)類而不影響連接著的對(duì)象或者調(diào)用的代碼。當(dāng)然, spring xml bean factories 有更多的功能沒(méi)有在這里描述,但是,應(yīng)當(dāng)讓你對(duì)基本使用有了一些感覺(jué)。以及,簡(jiǎn)單的屬性
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度先進(jìn)數(shù)控設(shè)備長(zhǎng)期租賃服務(wù)合同3篇
- 二零二五年度石油化工行業(yè)勞動(dòng)合同安全防護(hù)規(guī)范范本3篇
- 二零二五年度汽車吊車租賃及配套設(shè)備供應(yīng)合同2篇
- 二零二四年原材料供應(yīng)合同(鋼鐵行業(yè))3篇
- 2025年度校園周邊攤位租賃管理協(xié)議書4篇
- 二零二五年度砂石料運(yùn)輸及工地現(xiàn)場(chǎng)清理服務(wù)協(xié)議
- 二零二五年度智能工廠臨時(shí)工就業(yè)合同4篇
- 2025年度廠房折疊門研發(fā)成果轉(zhuǎn)化與技術(shù)合作合同4篇
- 個(gè)人培訓(xùn)費(fèi)用繳納協(xié)議模板版B版
- 2025年度二零二五煤炭產(chǎn)業(yè)技術(shù)創(chuàng)新合同4篇
- 《腦梗塞的健康教育》課件
- 《請(qǐng)柬及邀請(qǐng)函》課件
- 中小銀行上云趨勢(shì)研究分析報(bào)告
- 機(jī)電安裝工程安全培訓(xùn)
- 遼寧省普通高中2024-2025學(xué)年高一上學(xué)期12月聯(lián)合考試語(yǔ)文試題(含答案)
- 青海原子城的課程設(shè)計(jì)
- 常州大學(xué)《新媒體文案創(chuàng)作與傳播》2023-2024學(xué)年第一學(xué)期期末試卷
- 麻醉蘇醒期躁動(dòng)患者護(hù)理
- 英語(yǔ)雅思8000詞匯表
- 小學(xué)好詞好句好段摘抄(8篇)
- JT-T-1059.1-2016交通一卡通移動(dòng)支付技術(shù)規(guī)范第1部分:總則
評(píng)論
0/150
提交評(píng)論