版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、1 知識點大綱IoC 原理分析l基于 XML 的 IoC 實現(xiàn)l基于 XML 的 DI 使用l基于注解的 IoC 實現(xiàn)lSpring 純注解實現(xiàn)方式(無 XML 配置)lSpring 整合 JunitlSpring 分模塊開發(fā)lSpring AOP 原理分析lSpring AOP 基于 XML 和注解的實現(xiàn)lSpring 應(yīng)用之 Spring JDBC 實現(xiàn)lSpring 應(yīng)用之 JdbcDaoSupportlSpring 應(yīng)用之事務(wù)支持lSpring 與 Mybatis 整合l2 Spring 介紹什么是 Spring?百科中的介紹ll Spring:l 我們經(jīng)常說的 Spring 其實指的
2、是 Spring Framework(spring框架)。為什么學(xué)習(xí) Spring?l 好處:耦合和內(nèi)聚介紹Spring 版本介紹l spring 的官網(wǎng):l spring framework 的:*耦合性(Coupling),也叫耦合度,是對模塊間關(guān)聯(lián)程度的度量。*在軟件工程中,耦合指的就是就是對象之間的依賴性。對象之間的耦合越高,維護成本越高。因此對象的設(shè)計應(yīng)使類和構(gòu)件之間的耦合最小。軟件設(shè)計中通常用耦合度和內(nèi)聚度作為衡量模塊 程度的標(biāo)準(zhǔn)。劃分模塊的一個準(zhǔn)則就是高內(nèi)聚低耦合。*內(nèi)聚標(biāo)志一個模塊內(nèi)各個元素彼此結(jié)合的緊密程度,它是信息隱蔽和局部化概念的自然擴展。內(nèi)聚是從功能角度來度量模塊內(nèi)的
3、,一個好的內(nèi)聚模塊應(yīng)當(dāng)恰好做一件事。*內(nèi)聚和耦合是密切相關(guān)的,同其他模塊存在高耦合的模塊意味著低內(nèi)聚,而高內(nèi)聚的模塊意味著該模塊同其他模塊之間是低耦合。在進行軟件設(shè)計時,應(yīng)力爭做到高內(nèi)聚,低耦合。l jar 包地址:Spring 體系結(jié)構(gòu)Spring概念介紹給 Spring 框架。l AOP:Aspect Oriented Programming,面向切面編程。在不修改目標(biāo)對象的源代碼情況下,增強 IoC 容器中 Bean 的功能。l DI:Dependency Injection,依賴注入。在 Spring 框架負責(zé)創(chuàng)建 Bean 對象時,動態(tài)的將依賴對象注入到 Bean 組件中!l Spr
4、ing 容器:指的就是 IoC 容器。l IoC(中的):Inverse of Control,控制反轉(zhuǎn)。對象的創(chuàng)建權(quán)力由程序反轉(zhuǎn)3 Spring IoC 原理分析什么是 IoC 容器?l 什么是 IoC 容器?l Spring 框架中的工廠有哪些?l ApplicationContext 和 BeanFactory 的區(qū)別?*創(chuàng)建 Bean 對象的時機不同:*ApplicationContext 接口()* 實現(xiàn)了 BeanFactory 接口* 實現(xiàn) ApplicationContext 接口的工廠,可以獲取到容器中具體的 Bean 對象*BeanFactory 工廠(是 Spring 框
5、架早期的創(chuàng)建 Bean 對象的工廠接口)* 實現(xiàn) BeanFactory 接口的工廠也可以獲取到 Bean 對象*其實通過源碼分析,不管是 BeanFactory 還是 ApplicationContext,其實最終的底層BeanFactory 都是 DefaultListableBeanFactory實例)。*所謂的 IoC 容器就是指的 Spring 中 Bean 工廠里面的 Map結(jié)構(gòu)(了 Bean 的*要想使用 Spring IoC,必須要創(chuàng)建 Spring IoC 容器。*那么什么是 IoC 容器呢?*如何創(chuàng)建 IoC 容器呢?*IoC 容器是如何初始化 Bean 實例的呢?*Bea
6、nFactory 采取延遲加載,第一次 getBean 時才會初始化 Bean。*ApplicationContext 是加載完 applicationContext.xml 時,就創(chuàng)建具體的 Bean對象的實例。(只對 BeanDefition 中描述為是單例的 bean,才進行餓漢式加載)如何創(chuàng)建 Web 環(huán)境中的 IoC 容器?創(chuàng)建方式l ApplicationContext 接口常用實現(xiàn)類*ClassPathXmlApplicationContext:它是從類的根路徑下加載配置文件推薦使用這種*FileSystemXmlApplicationContext:它是從磁盤路徑上加載配置文件
7、,配置文件可以在磁盤的任意位置。*AnnotationConfigApplicationContext:l Java 應(yīng)用中創(chuàng)建 IoC 容器:(了解)l Web 應(yīng)用中創(chuàng)建 IoC 容器:(重點)web.xml 中配置 ContextLoaderListener 接口,并配置 ContextConfigLocation 參數(shù)*web 容器啟動之后加載 web.xml,此時加載 ContextLoaderListener器(實現(xiàn)了ServletContextListener 接口,該接口的描述請見下面三類八種器)*ContextLoaderListener器會在 web 容器啟動的時候,觸發(fā)
8、contextInitialized()方法。*contextInitialized()方調(diào)用 initWebApplicationContext()方法,該方法負責(zé)創(chuàng)建Spring 容器(DefaultListableBeanFactory)。【W(wǎng)eb 三類八種器】:*域?qū)ο蟮纳芷冢?ServletContextListener:*創(chuàng)建:服務(wù)器啟動*銷毀:服務(wù)器正常關(guān)閉*spring ContextLoaderListener(服務(wù)器啟動時負責(zé)加載 Spring 配置文件)*HttpSessionListener*創(chuàng)建:第一次request.getHttpSession();*銷毀:調(diào)用
9、 invalidate();關(guān)閉;過期*ServletRequestListenerApplicationContext context = new ClassPathXmlApplicationContext(xml 路徑);當(dāng)我們使用注解配置容器對象時,需要使用此類來創(chuàng)建 spring 容器。它用來注解。源碼分析參考資料中的源碼工程spring-sourcecode1.web 服務(wù)器(tomcat)啟動會加載 web.xm(l 啟動 ContextLoaderListener器):2.創(chuàng)建 Web 環(huán)境中的 Spring 容器*創(chuàng)建:每一次*銷毀:響應(yīng)結(jié)束*域?qū)ο蟮膶傩裕海ㄌ砑?、刪除、替換
10、)* ServletContextAttributeListener* HttpSessionAttributeListener* ServletRequestAttributeListener*HttpSession 中 JavaBean 的改變:* HttpSessionBindingListener(HttpSession 和JavaBean 對象的綁定和解綁)* HttpSessionActivationListener(HttpSession 的序列化,活化、鈍化)3.ContextLoader 類中創(chuàng)建 Spring 容器并初始化容器中的 Bean 實例4.configureAnd
11、RefreshWebApplicationContext 方法中調(diào)用最終初始化Bean 的refresh 方法圖示該圖示主要是分析上面第三步中【創(chuàng)建 Spring 容器】的圖示IoC 容器如何創(chuàng)建 Bean 對象?源碼分析源碼來源于 AbstractApplicationContext 類:Overridepublic void refresh() throws BeansException, IllegalStateException synchronized (this.startupShutdownMonitor) / Prepare this context for refreshin
12、g. prepareRefresh();/1.創(chuàng)建真正的Spring容器(DefaultListableBeanFactory)/2.加載BeanDefition(描述要初始化的Bean的信息)/3.將BeanDefition到BeanDefitionRegistry/ Tell the subclass to refresh the internal bean factory. ConfigurableListableBeanFactory beanFactory = obtainFreshBeanFactory();/ Prepare the bean factory for use in
13、 this context. prepareBeanFactory(beanFactory);try / Allows post-processing of the bean factory in context subclasses. postProcessBeanFactory(beanFactory);/執(zhí)行實現(xiàn)了BeanFactoryPostProcessor接口的Bean/比如PropertyPlaceHolderConfigurer(context:property-placeholer) 就是此處被調(diào)用的,替換掉BeanDefition中的占位符($)中的內(nèi)容/ Invoke f
14、actory processors registered as beans in the context. invokeBeanFactoryPostProcessors(beanFactory);/BeanPostProcessor(后置處理器)/比如容器自動裝載了一個AutowiredAnnotationBeanPostProcessor后置處理器(實現(xiàn)Autowired注解功能)/ Register bean processors that intercept bean creation. registerBeanPostProcessors(beanFactory);/ Initial
15、ize message source for this context. initMessageSource();/ Initialize event multicaster for this context. initApplicationEventMulticaster();/ Initialize other special beans in specific context subclasses. onRefresh();/ Check for listener beans and register them. registerListeners();/初始化非懶加載方式的單例Bean
16、實例/ Instantiate all remaining (non-lazy-init) singletons. finishBeanFactoryInitialization(beanFactory);/ Last step: publish corresponding event. finishRefresh();catch (BeansException ex) if (logger.isWarnEnabled() logger.warn(Exception encountered during context initialization - +cancelling refresh
17、attempt: + ex);/ Destroy already created singletons to avoid dangling resources. destroyBeans();/ Reset active flag. cancelRefresh(ex);/ Propagate exception to caller.throw ex;finally / Reset common introspection caches in Springs core, since we/ might not ever need metadata for singleton beans anym
18、ore. monCaches();圖示4 Spring IoC 基于 XML 的使用創(chuàng)建工程環(huán)境準(zhǔn)備l maven(3.3.9)l JDK(1.8)l spring(5.0.7)l Eclipse(4.7Oxygen)工程搭建l POM 文件4.0.0com.kkbspring0.0.1-SNAPSHOTorg.springframeworkspring-core5.0.7.RELEASEorg.springframeworkspring-context5.0.7.RELEASEorg.springframeworkspring-beans5.0.7.RELEASEorg.springfram
19、eworkspring-expression5.0.7.RELEASEjunitjunit4.12l spring 配置文件(只編寫配置文件頭)具體實現(xiàn)在 Spring 的 XML 配置文件中配置一個 bean,該最終會被加載為一個BeanDefition 對象(描述對象信息)org.apache.maven.pluginspiler-pluginUTF-8案例演示l 編寫接口:UserServicel 編寫實現(xiàn)類:UserServiceImpll 編寫 XML 文件:applicationContext.xmll 編寫單元測試代碼:TestSpringbean詳解*bean
20、作用:*用于配置對象讓 spring 來創(chuàng)建的。*默認情況下它調(diào)用的是類中的無參構(gòu)造函數(shù)。如果沒有無參構(gòu)造函數(shù)則不能創(chuàng)建成功。*bean屬性:*id:給對象在容器中提供一個唯一標(biāo)識。用于獲取對象。*class:指定類的全限定類名。用于反射創(chuàng)建對象。默認情況下調(diào)用無參構(gòu)造函數(shù)。*scope:指定對象的作用范圍。* singleton :默認值,單例的.* prototype :多例的.* request :WEB 項目中,Spring 創(chuàng)建一個 Bean 的對象, 將對象存入到request 域中.* session :WEB 項目中,Spring 創(chuàng)建一個 Bean 的對象, 將對象存入到se
21、ssion 域中.*global session:WEB 項目中,應(yīng)用在 Portlet 環(huán)境.如果沒有Portlet環(huán)境那么 globalSession 相當(dāng)于 session.*init-method:指定類中的初始化方法名稱。*destroy-method:指定類中銷毀方法名稱。*bean 的作用范圍:*單例對象:scope=singleton*一個應(yīng)用只有一個對象的實例。它的作用范圍就是整個。*生命周期:*對象出生:當(dāng)應(yīng)用加載,創(chuàng)建容器時,對象就被創(chuàng)建了。*對象活著:只要容器在,對象一直活著。*對象:當(dāng)應(yīng)用卸載,銷毀容器時,對象就被銷毀了。*多例對象:scope=prototype*每
22、次對象時,都會重新創(chuàng)建對象實例。*生命周期:*對象出生:當(dāng)使用對象時,創(chuàng)建新的對象實例。*對象活著:只要對象在使用中,就一直活著。*對象:當(dāng)對象長時間不用時,被 java 的回收器回收了。實例化 bean 的三種方式l 第一種:使用默認無參構(gòu)造函數(shù)(重點)l 第二種:靜態(tài)工廠(了解)public class StaticFactory public static UserService createUserService()returnnewUserServiceImpl();l 第三種:實例工廠(了解)/*/* 模擬一個靜態(tài)工廠,創(chuàng)建業(yè)務(wù)層實現(xiàn)類*/*在默認情況下:它會根據(jù)默認無參構(gòu)造函數(shù)來
23、創(chuàng)建類對象。*如果 bean 中沒有默認無參構(gòu)造函數(shù),將會創(chuàng)建失敗。public class InstanceFactory public UserService createUserService()new UserServiceImpl();return5 Spring DI(依賴注入)介紹概述*什么是依賴?*依賴指的就是 Bean 實例中的屬性*屬性分為:簡單類型的屬性、POJO 類型的屬性、集合數(shù)組類型的屬性。* 模擬一個實例工廠,創(chuàng)建業(yè)務(wù)層實現(xiàn)類* 此工廠創(chuàng)建對象,必須現(xiàn)有工廠實例對象,再調(diào)用方法*/依賴注入的方式(基于 XML)l 構(gòu)造函數(shù)注入*顧名思義,就是使用類中的構(gòu)造函數(shù),給
24、成員變量賦值。*注意,賦值的操作不是我們自己做的,而是通過配置的方式,讓 spring框架來為我們注入。具體代碼如下:public class UserServiceImpl implements UserService private int id;private String name;public UserServiceImpl(int id, String name) this.id = id; = name;Overridepublic void saveUser() System.out.println(保存用戶:id為+id+,name為+name+Servic
25、e實現(xiàn));*什么是依賴注入?*依賴注入:Dependency Injection。它是 spring 框架ioc 的具體實現(xiàn)。*為什么要進行依賴注入?*我們的程序在編寫時,通過控制反轉(zhuǎn),把對象的創(chuàng)建交給了 spring,但是代碼中不可能出現(xiàn)沒有依賴的情況。*ioc 解耦只是降低他們的依賴關(guān)系,但 消除。例如:我們的業(yè)務(wù)層仍會調(diào)用持久層的方法。那這種業(yè)務(wù)層和持久層的依賴關(guān)系,在使用 spring 之后,就讓 spring 來維護了。*簡單的說,就是坐等框架把持久層對象傳入業(yè)務(wù)層,而不用我們自己去獲取。l set 方法注入*set 方法注入又分為手動裝配方式注入和自動裝配方式注入。*手動裝配方式(
26、XML 方式):bean的子property,需要在類中指定set 方法。*自動裝配方式(注解方式,后面講解):Autowired 注解、Resource 注解。*Autowired:一部分功能是查找實例,從 spring 容器中根據(jù)類型(java 類)獲取對應(yīng)的實例。另一部分功能就是賦值,將找到的實例,裝配給另一個實例的屬性值。l 使用 p 名稱空間注入數(shù)據(jù)(本質(zhì)上還是調(diào)用 set 方法,自行了解)依賴注入不同類型的屬性(基于 XML)l 簡單類型1. 步驟一:需要先引入 p 名稱空間* 在schema的名稱空間中加入該行:xmlns:p=2. 步驟二:使用 p 名稱空間的語法* p:屬性名
27、 = * p:屬性名-ref = 3. 步驟三:測試* (注意事項:一個 java 類型在同一個 spring 容器中,只能有一個實例)*Resource:一部分功能是查找實例,從 spring 容器中根據(jù) Bean 的名稱(bean 的名稱)獲取對應(yīng)的實例。另一部分功能就是賦值,將找到的實例,裝配給另一個實例的屬性值。類型ll 集合類型(數(shù)組)1. 如果是數(shù)組或者 List 集合,注入配置文件的方式是一樣的美美小風(fēng)2. 如果是 Set 集合,注入的配置文件方式如下:哈哈6 Spring IoC 和DI 基于注解使用呵呵3. 如果是 Map 集合,注入的配置方式如下:4. 如果是 proper
28、ties 屬性文件的方式,注入的配置如下:root123IoC 注解使用*第一步:spring 配置文件中,配置ponent-scan*第二步:類上面加上注解Component,或者它的衍生注解Controller、Service、Repository*學(xué)習(xí)基于注解的 IoC 配置,大家腦海里首先得有一個認知,即注解配置和 xml 配置要實現(xiàn)的功能都是一樣的,都是要降低程序間的耦合。只是配置的形式不一樣。*關(guān)于實際的開發(fā)中到底使用 xml 還是注解,每家公司有著不同的使用習(xí)慣。所以這兩種配置方式我們都需要掌握。*我們在講解注解配置時,采用上一章節(jié)的案例,把 spring 的 xml 配置內(nèi)容改
29、為使用注解逐步實現(xiàn)。常用注解IoC 注解(創(chuàng)建對象)相當(dāng)于:l Component 注解l Controller、Service、Repository 注解DI 注解(依賴注入)相當(dāng)于:l Autowired*他們?nèi)齻€注解都是針對Component 的衍生注解*他們的作用及屬性都是一模一樣的。他們只不過是提供了更加明確的語義化。Controller:一般用于表現(xiàn)層的注解。Service:一般用于業(yè)務(wù)層的注解。Repository:一般用于持久層的注解。*細節(jié):如果注解中有且只有一個屬性要賦值時,且名稱是 value,value 在賦值是可以不寫。*作用:把讓 spring 來管理。相當(dāng)于在 x
30、ml 中配置一個 bean。*屬性:value:指定 bean 的 id。如果不指定 value 屬性,默認 bean 的 id 是當(dāng)前類的類名。首字母小寫。l Qualifierl Resource相當(dāng)于:l Value*給基本類型和 String 類型注入值*可以使用占位符獲取屬性文件中的值。*默認按照名稱進行裝配,名稱可以通過 name 屬性進行指定*這個注解屬于 J2EE 的*如果沒有指定 name 屬性,當(dāng)注解寫在字段上時,默認取字段名進行安裝名稱查找,當(dāng)找不到與名稱匹配的 bean 時才按照類型進行裝配。*但是需要注意的是,如果 name 屬性一旦指定,就只會按照名稱進行裝配。推薦
31、使用Resource 注解,因為這個注解是屬于 J2EE 的,減少了與 spring 的耦合。這樣代碼看起就比較優(yōu)雅。*在自動按照類型注入的基礎(chǔ)之上,再按照 Bean 的 id 注入。*它在給字段注入時不能使用,必須和Autowire 一起使用;但是給方法參數(shù)注入時,可以使用。*默認按類型裝配(byType)*這個注解是 spring 自身的*默認情況下必須要求依賴對象必須存在,如果要允許 null 值,可以設(shè)置它的 required 屬性為 false,如:Autowired(required=false)*如果我們想使用名稱裝配可以結(jié)合Qualifier 注解進行使用改變作用范圍l Sco
32、pe和生命周期相關(guān)關(guān)于注解和 XML 的選擇問題*注解的優(yōu)勢:配置簡單,維護方便(我們找到類,就相當(dāng)于找到了對應(yīng)的配置)。*XML 的優(yōu)勢:修改時,不用改源碼。不涉及重新編譯和部署。*Spring 管理 Bean 方式的比較:相當(dāng)于:PostConstruct 和PreDestroy相當(dāng)于*作用:指定 bean 的作用范圍。*屬性:value:指定范圍的值。取值:singleton prototype request session globalsessionValue(“$name”)/name 是 properties 文件中的 keyprivate String name;7 Sprin
33、g 的純注解配置*寫到此處,基于注解的 IoC 配置已經(jīng)完成,但是大家都發(fā)現(xiàn)了一個問題:我們依然離不開 spring 的 xml 配置文件,那么能不能不寫這個 applicationContext.xml,所有配置都用注解來實現(xiàn)呢?*當(dāng)然,同學(xué)們也需要注意一下,我們選擇哪種配置的原則是簡化開發(fā)和配置方便,而待改造的問題*想能不能將以下這些 bean 的配置都從 xml 中去掉,并且最終將 XML 也去掉。*如果可以,那么我們就可以脫離 xml 配置了。l 注解掃描配置(能不能去掉)l 非自定義的 Bean 配置(比如:SqlSessionFactory 和 BasicDataSource 配置
34、)id=sqlSessionFactory class=org.mybatis.spring.SqlSessionFactoryBeanl 去掉 XML 后,如何創(chuàng)建 ApplicationContext新的注解Configurationbeanl 介紹:*從 Spring3.0,Configuration 用于定義配置類,可替換 xml 配置文件*相當(dāng)于根之前創(chuàng)建 ApplicationContext 都是通過XML 文件進行創(chuàng)建的。ApplicationContext context =new ClassPathXmlApplicationContext(“beans.xml”);非追求某
35、種技術(shù)。Beanl 介紹:*Bean 標(biāo)注在方法上(返回某個實例的方法),等價于 spring 配置文件中的*作用為:bean 對象*主要用來配置非自定義的 bean,比如 DruidDataSource、SqlSessionFactoryl 屬性:*name:給當(dāng)前Bean 注解方法創(chuàng)建的對象指定一個名稱(即 bean 的 id)。* 配置類 內(nèi)部包含有一個或多個被Bean 注解的方法, 這些方法將會被AnnotationConfigApplicationContext 或 AnnotationConfigWebApplicationContext 類進行掃描,并用于構(gòu)建 bean 定義,初
36、始化 Spring 容器。l 屬性:value:用于指定配置類的字節(jié)碼l 示例代碼:Configurationpublic class SpringConfiguration /spring 容器初始化時,會調(diào)用配置類的無參構(gòu)造函數(shù)public SpringConfiguration() System.out.println(“容器啟動初始化。”);ComponentScanl 介紹:*相當(dāng)于ponent-scan*組件掃描器,掃描Component、Controller、Service、Repository 注解的類。*如果不指定,默認與標(biāo)注的方法名相同*Bean注 解 默 認 作 用 域
37、為 單 例singleton作 用 域 , 可 通 過Scope(“prototype”)設(shè)置為原型作用域;l 示例代碼:Configurationpublic class SpringConfiguration /spring 容器初始化時,會調(diào)用配置類的無參構(gòu)造函數(shù)public SpringConfiguration()System.out.println(“容器啟動初始化?!?;BeanScope(“prototype”)public UserService userService()return new UserServiceImpl(1,“張三”);配置類:Configuration
38、 ComponentScan(basePackages=com.kkb.spring.service) public class SpringConfiguration public SpringConfiguration() System.out.println(容器初始化.);/Bean/Scope(prototype)/public UserService userService() /return new UserServiceImpl(1,張三);/*該注解是編寫在類上面的,一般配合Configuration 注解一起使用。l 屬性:*basePackages:用于指定要掃描的包。*
39、value:和 basePackages 作用一樣。l 示例代碼:Bean 類(Service 類):Servicepublic class UserServiceImpl implements UserService Overridepublic void saveUser() System.out.println(保存用戶Service實現(xiàn));PropertySourcel 介紹*加載properties 配置文件*編寫在類上面*相當(dāng)于 context:property-placeholderl 屬性value:用于指定 properties 文件路徑,如果在類路徑下,需要寫上 class
40、pathl 示例代碼配置類:Configuration PropertySource(“classpath:perties”) public class JdbcConfig Value($jdbc.driver) private String driver; Value($jdbc.url) private String url; Value($jdbc.username) private String username; Value($jdbc.password) private String password;/* 創(chuàng)建一個數(shù)據(jù)源,并存入 spring容器中* retur
41、n*/ Bean(name=dataSource)public DataSource createDataSource() l 問題:*當(dāng)系統(tǒng)中有多個配置類時怎么辦呢?想之前使用 XML 配置的時候是如何解決該問題的。properties 文件:.mysql.jdbc.Driver jdbc.url=jdbc:mysql:/spring jdbc.username=rootjdbc.password=roottry ComboPooledDataSource ds = new ComboPooledDataSource(); ds.setDriverClass(driver); ds.setJ
42、dbcUrl(url);ds.setUser(usern ame); ds.setPassword( password); return ds; catch (Exception e) throw new RuntimeException(e);Import通過注解獲取容器l Java 應(yīng)用(AnnotationConfigApplicationContext)l 介紹*用來組合多個配置類*相當(dāng)于 spring 配置文件中的 import*在引入其他配置類時,可以不用再寫Configuration 注解。當(dāng)然,寫上也沒問題。l 屬性value:用來指定其他配置類的字節(jié)碼文件l 示例代碼:ConfigurationComponentScan(basePackages = com.kkb.spring) Import( JdbcConfig.class
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度生態(tài)農(nóng)業(yè)科技園承包經(jīng)營合同范本3篇
- 2025年度綠色能源儲藏室建設(shè)與維護合同3篇
- 二零二五版城市綜合體建設(shè)項目建筑垃圾清運及環(huán)保處理合同3篇
- 2025年度體育場館租賃與賽事組織合同3篇
- 二零二五年高性能保溫施工合同補充條款及驗收標(biāo)準(zhǔn)3篇
- 2025年水電暖安裝與節(jié)能改造項目總承包合同3篇
- 2025年度醫(yī)院窗簾定制及消毒防菌合同3篇
- 2025年度智能化倉庫場地租賃服務(wù)合同范本3篇
- 2025年度拍賣物品售后服務(wù)反饋合同范本
- 2025年度智能租賃平臺廠房租賃居間協(xié)議3篇
- 2024-2030年中國電子郵箱行業(yè)市場運營模式及投資前景預(yù)測報告
- 基礎(chǔ)設(shè)施零星維修 投標(biāo)方案(技術(shù)方案)
- 人力資源 -人效評估指導(dǎo)手冊
- 大疆80分鐘在線測評題
- 2024屆廣東省廣州市高三上學(xué)期調(diào)研測試英語試題及答案
- 中煤平朔集團有限公司招聘筆試題庫2024
- 2023年成都市青白江區(qū)村(社區(qū))“兩委”后備人才考試真題
- 不付租金解除合同通知書
- 區(qū)域合作伙伴合作協(xié)議書范本
- 中學(xué)數(shù)學(xué)教學(xué)設(shè)計全套教學(xué)課件
- 環(huán)衛(wèi)公司年終工作總結(jié)
評論
0/150
提交評論