




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
E6636BC20180234D78A0072836F0BA7012B9B20215E26B50ACD98F3EB1392B551B4EBF38216C3B0222692E0838460BEBE009217A41D02B111BBFC23A765E14D124F449AD6A2784D7348224B76F624F873694ECB77C9D5FC1A8B6E19E00602C88DA962B9CCE3第七章SpringIOC項目需求背景知識項目介紹經典問題強化本章小結0102030405-理解依賴注入的概念-理解IOC與DI的區(qū)別與聯系-掌握依賴注入的實現方式-了解SpringBean的常用屬性及其子元素-掌握實例化SpringBean的三種方式-掌握SpringBean的作用域-熟悉SpringBean的生命周期-掌握SpringBean的四種裝配方式0102030405060708E6636BC20180234D78A0072836F0BA7012B9B20215E26B50ACD98F3EB1392B551B4EBF38216C3B0222692E0838460BEBE009217A41D02B111BBFC23A765E14D124F449AD6A2784D7348224B76F624F873694ECB77C9D5FC1A8B6E19E00602C88DA962B9CCE3項目需求01功能描述1.1為滿足用戶需求,我們需要開發(fā)一個新建用戶的功能,在創(chuàng)建用戶時可以填寫相關信息,包括用戶名、密碼、聯系電話等。同時,還需要設置激活狀態(tài),默認為開啟。當用戶創(chuàng)建完成后,處于激活狀態(tài)的用戶可以直接登錄系統(tǒng)。E6636BC20180234D78A0072836F0BA7012B9B20215E26B50ACD98F3EB1392B551B4EBF38216C3B0222692E0838460BEBE009217A41D02B111BBFC23A765E14D124F449AD6A2784D7348224B76F624F873694ECB77C9D5FC1A8B6E19E00602C88DA962B9CCE3背景知識02知識導圖2.1圖1
第7章知識導圖反射機制——反射機制概述2.2Java反射主要通過包java.lang.reflect.*來實現,它提供了一組類和接口用于在程序運行時獲取目標類、接口、字段、方法及構造方法等信息,并可以在程序運行時動態(tài)地創(chuàng)建、操作和銷毀它們。例如:反射機制——反射機制的優(yōu)點與缺點2.2優(yōu)點:(1)動態(tài)性:反射機制可以在程序運行時動態(tài)創(chuàng)建對象、調用方法和訪問屬性,提高程序的靈活性。(2)可擴展性:反射機制允許開發(fā)者在運行時加載任意類的任意版本,以實現程序的動態(tài)擴展和更新。(3)動態(tài)代理:反射機制可以使程序在運行時動態(tài)生成代理類,從而實現動態(tài)代理。(4)框架支持:反射機制為很多框架(例如Spring、Mybatis)的實現提供了技術基礎。缺點:(1)性能問題:反射需要在程序運行時動態(tài)對代碼進行分析和解析,因此通常比直接調用方法和訪問屬性要慢。(2)安全性問題:反射機制可以訪問類的私有成員,破壞了面向對象的封裝性,因此需要謹慎使用。(3)復雜性問題:Java反射機制的使用需要調用大量API,以致程序的可讀性和可維護性會受到影響。反射機制——反射機制在Spring中的運用2.2(1)依賴注入(DependencyInjection):在Spring中,DI是通過反射機制實現的。Spring容器會掃描應用程序中的類,找到需要注入依賴的地方,并使用反射機制實例化需要注入的對象。(2)AOP(Aspect-OrientedProgramming):Spring的AOP模塊使用反射機制來攔截方法調用,并在方法調用前、調用后或拋出異常時執(zhí)行特定操作。(3)動態(tài)代理(DynamicProxy):Spring的AOP模塊還使用反射機制創(chuàng)建動態(tài)代理。動態(tài)代理是一種在運行時動態(tài)生成代理對象的機制,它通過實現特定的接口來代理原始對象的方法調用。Spring使用反射來創(chuàng)建這種代理,從而可以在運行時攔截和處理方法調用。(4)配置文件解析:Spring使用反射機制來解析XML或注解配置文件,并根據配置文件中的信息創(chuàng)建對應的對象。單例設計模式——單例模式概述2.3單例模式(SingletonPattern)是Java中最常用的創(chuàng)建型設計模式之一,它提供了一種創(chuàng)建對象的最佳方式,該模式涉及到一個單一的類,該類負責創(chuàng)建自己的對象,同時確保只有單個對象被創(chuàng)建。該類還提供了一種直接訪問其唯一對象的方式,而不需要實例化該類對象。
單例設計模式——單例模式的應用場景2.3(1)日志類:日志類可以使用單例模式實現,通常在應用程序的各個組件中提供全局日志的訪問點,這樣就無需在每次執(zhí)行日志操作時去創(chuàng)建日志對象。(2)配置類:配置類也可以設計為單例實現,例如應用程序的配置文件由一個單例對象進行統(tǒng)一管理,程序的其他組件就可以通過該對象讀取配置信息,從而簡化在復雜環(huán)境下的配置管理。(3)工廠類:可以將工廠對象的創(chuàng)建設計為單例模式,在全局狀態(tài)下始終只有一個工廠對象存在,從而避免高并發(fā)場景下唯一對象被實例化多次的情況。(4)以共享模式訪問資源的類:在實際開發(fā)中,某些需要共享訪問的資源也可以設計為單例模式。單例設計模式——餓漢式單例2.3餓漢式單例實現方式是在類加載的時候就創(chuàng)建實例,并將實例保存在一個靜態(tài)常量中。上述代碼中由于加入了static關鍵字,根據JVM特性,該類在加載時就會完成Singleton的實例化,從而保證后面的線程在訪問這個實例時得到的都是單例。但由于程序啟動時所有單例就被創(chuàng)建好了,因此當單例對象較多時會浪費一定的內存。單例設計模式——懶漢式單例2.3懶漢式單例是另外一種單例實現方式,它會延遲創(chuàng)建實例,直到調用者第一次訪問該實例時才會被創(chuàng)建。當程序執(zhí)行時如果有多個線程同時訪問getInstance()方法,由于此時instance實例為空,因此這些線程都會執(zhí)行instance=newSingleton2()代碼,從而導致多個實例被創(chuàng)建,以致出現線程不安全問題。為了解決這個問題,我們可以使用雙重檢測方式來創(chuàng)建單例。單例設計模式——雙重檢測2.3雙重檢測鎖定(Double-checkedlocking)是實際開發(fā)中最常用的一種單例實現方式,它通過加鎖的方式保證了線程安全性。當程序執(zhí)行時如果有多個線程同時訪問getInstance()方法,由于此時instance實例為空,因此這些線程都會執(zhí)行instance=newSingleton2()代碼,從而導致多個實例被創(chuàng)建,以致出現線程不安全問題。為了解決這個問題,我們可以使用雙重檢測方式來創(chuàng)建單例。
單例設計模式——優(yōu)缺點2.3優(yōu)點:(1)單例模式降低了系統(tǒng)中實例數量,提高了系統(tǒng)的可維護性。(2)單例模式創(chuàng)建出的唯一實例可以被其他對象復用和共享,提高了代碼的復用性。(3)由于單例模式只會創(chuàng)建一個實例,這樣可以減少不必要的資源消耗,例如在創(chuàng)建和銷毀對象時所需的資源與時間成本。缺點:(1)由于單例模式只有一個實例,如果該實例中的狀態(tài)被多個對象共享和修改,可能會導致對象狀態(tài)的不一致。(2)單例模式需要保證只有一個實例,因此在多線程環(huán)境下需要使用特殊的處理方式來保證實例的唯一性,這可能會導致代碼的復雜性增加。(3)由于單例模式的實例化過程是在類內部進行的,因此可能會影響系統(tǒng)的擴展性,特別是在需要擴展單例類時,可能會需要修改該類的代碼。
控制反轉與依賴注入的概念2.4在傳統(tǒng)模式下,當某個Java對象(調用者)需要調用另一個Java對象(被調用者,即被依賴對象)時,首先會通過“new被調用者”的方式來創(chuàng)建對象(如下圖所示),這種方式會導致調用者與被調用者之間的耦合度增加,不利于項目后期的擴展和維護。
控制反轉與依賴注入的概念2.4在使用Spring框架之后,對象的實例不再由調用者來創(chuàng)建,而是由Spring容器來創(chuàng)建,當調用者需要使用被調用者時直接從Spring容器中獲取就可以。這樣對象的控制權就由開發(fā)者的手動創(chuàng)建轉移到了Spring容器,控制權發(fā)生了反轉,這就是Spring的控制反轉。另外,從Spring容器的角度來看,在調用者需要使用被調用者時,Spring容器會將被調用者對象從容器中取出,并賦值給調用者的成員變量,這相當于為調用者注入了它所依賴的實例,這就是Spring的依賴注入。依賴注入的實現方式——屬性setter方法注入2.5屬性setter方法注入是指IOC容器使用setter方法注入被依賴的實例。通過調用無參構造器或無參靜態(tài)工廠方法實例化Bean后,調用該Bean的setter方法,即可實現基于setter方法的依賴注入。spring配置文件:appIicationContext.xmlUserServiceImpl.java依賴注入的實現方式——構造方法注入2.5構造方法注入是指loC容器使用構造方法注入被依賴的實例。此種方式通過調用帶參數的構造方法來實現,每個參數都代表一個依賴。UserServiceImpl.javaspring配置文件:appIicationContext.xmlSpringIOC容器2.52、ApplicationContextApplicationContext是BeanFactory的子接口,也被稱為應用上下文,它不僅包含了BeanFactory的所有功能,還添加了對國際化、資源訪問、事件傳播等方面的支持。與BeanFactory不同的是,ApplicationContext實例化后會自動對所有的單例Bean進行實例化并配置它們之間的依賴關系。由于ApplicationContext接口功能更為強大,因此在絕大多數場景下,都會使用ApplicationContext作為SpringIOC容器。ApplicationContext接口可以通過以下兩種方式完成實例化:(1)通過ClassPathXmlApplicationContext類完成實例化(推薦使用)ClassPathXmlApplicationContext類會從類路徑classPath中尋找并加載指定的XML配置文件,以完成ApplicationContext的實例化。SpringIOC容器2.5(2)通過FileSystemXmlApplicationContext類完成實例化。FileSystemXmlApplicationContext類會從指定的文件系統(tǒng)路徑(絕對路徑)中尋找并加載對應的XML配置文件,以完成ApplicationContext的實例化如果不指定絕對路徑,FileSystemXmlApplicationContext將嘗試在當前工作目錄中查找指定的配置文件。然而這種方式可能會導致程序的靈活性變差,因為當前工作目錄可能因環(huán)境變化而改變,從而導致無法正確找到配置文件。因此,推薦使用ClassPathXmlApplicationContext來從類路徑中加載配置文件,這樣可以確保配置文件始終可以被正確加載。SpringBean的配置及常用屬性2.6Spring的核心組成部分是IOC容器,它可以創(chuàng)建、存儲和管理SpringBean。為了使用IOC容器,開發(fā)者需要對Spring配置文件進行配置,其支持XML和Properties兩種格式的配置文件,其中XML格式最為常用,開發(fā)者可以通過編寫XML配置文件來注冊管理Bean之間的依賴關系。XML配置文件中,<bean>元素是最重要的元素之一,它用于描述一個Bean的定義和配置。屬性說明idBean的唯一標識符,通過id屬性來標識Bean的名稱。在Spring容器中,可以通過該名稱獲取對應的Bean實例。id屬性是必須屬性。classBean的類全名,用于告訴Spring容器該Bean的實現類是什么。在運行時,Spring容器會根據該類全名來創(chuàng)建Bean實例。class屬性是必須屬性。scopeBean的作用范圍,用于指定Bean的生命周期和可見范圍。常用的作用域有singleton、prototype、request、session、globalsession等。默認作用域是singleton(單例)。init-methodBean初始化時調用的方法。該方法必須是Bean實現類中的一個方法,并且不帶任何參數。destroy-methodBean銷毀時調用的方法。該方法必須是Bean實現類中的一個方法,并且不帶任何參數。lazy-init延遲加載,用于指定是否在第一次使用Bean時才進行實例化。如果將該屬性設置為true,表示該Bean將在第一次使用時才被實例化。autowire自動裝配模式,用于指定如何自動裝配該Bean的依賴。常用的自動裝配模式有byName、byType、constructor等。默認情況下,Spring不會自動裝配Bean的依賴。depends-on依賴的Bean名稱,用于指定該Bean依賴的其他Bean。如果該屬性存在,Spring會先創(chuàng)建指定的Bean,再創(chuàng)建當前Bean。factory-method工廠方法名稱,用于通過工廠方法來創(chuàng)建Bean。如果Bean的實例化過程比較復雜,可以使用工廠方法來創(chuàng)建Bean實例。factory-bean工廠Bean的名稱,用于指定使用哪個Bean作為工廠來創(chuàng)建Bean。如果Bean是由其他Bean創(chuàng)建的,可以使用該屬性來指定使用哪個Bean作為工廠。SpringBean的實例化2.7構造器實例化靜態(tài)工廠方式實例化實例工廠方式實例化SpringBean的實例化——構造器實例化2.7構造器實例化是指Spring容器通過Bean對應類中默認的無參構造方法來實例化Bean。如果類中包含含參的構造方法,則一定要顯示地聲明無參構造方法,否則會因為類中沒有無參數構造方法而報錯。User.javaspring配置文件:appIicationContext.xmlSpringBean的實例化——靜態(tài)工廠實例化2.7靜態(tài)工廠是實例化SpringBean的另一種方式,該方式要求創(chuàng)建一個靜態(tài)工廠方法來實現Bean的實例化。配置文件中<bean>元素的class屬性所指定的不再是Bean實例的實現類,而是靜態(tài)工廠類,同時還需要使用factory-method屬性來指定靜態(tài)工廠中創(chuàng)建Bean的方法。User.java添加含參構造方法創(chuàng)建靜態(tài)工廠StaticUserFactory類用來生成User類的對象在applicationContext.xml文件中通過靜態(tài)工廠方法來配置SpringBeanSpringBean的實例化——實例工廠實例化2.7此種方式的工廠類中,不再使用靜態(tài)方法創(chuàng)建Bean實例,而是直接創(chuàng)建Bean對象。同時在配置文件中,需要實例化的Bean也不是通過class屬性直接指向,而是通過factory-bean屬性指向配置的實例工廠,然后使用factory-method屬性確定使用工廠中的哪個方法。創(chuàng)建實例工廠類UserFactory在applicationContext.xml中配置實例工廠
SpringBean的作用域2.8SpringBean的作用域(Scope)是指Bean實例在應用中的生命周期和可見范圍。Spring容器提供多種不同的作用域,每種作用域都有不同的生命周期和可見范圍,開發(fā)者可以根據自己的需求選擇適合的作用域。在使用時只需在<beanscope=”...”>中指定具體的作用域即可作用域描述singleton(單例)Spring容器中只會創(chuàng)建一個Bean實例,所有請求該Bean的對象都會共享同一個實例。prototype(原型)每次請求Bean時,Spring容器都會創(chuàng)建一個新的Bean實例。每個請求都會獲得一個獨立的Bean實例。request(請求)每個HTTP請求都會創(chuàng)建一個新的Bean實例,該實例僅在當前請求的范圍內有效。不同的請求將獲得不同的Bean實例。session(會話)每個HTTP會話都會創(chuàng)建一個新的Bean實例,該實例僅在當前會話的范圍內有效。同一會話內的不同請求將共享同一個Bean實例。globalsession(全局會話)僅適用于基于portlet的Web應用,全局會話作用域僅在具有多個portlet的Web應用程序中才有意義。通常情況下,它與普通的HTTP會話作用域相同。
SpringBean的生命周期2.9Spring容器按照自身的方法(doCreateBean方法)將SpringBean的生命周期劃分為實例化、屬性賦值、初始化、銷毀等四個階段。
SpringBean的裝配方式2.10SpringBean的裝配可以理解為依賴關系注入,Bean的裝配方式即Bean依賴注入的方式。Spring容器支持多種形式的裝配方式,主要包括:基于XML的裝配基于JavaConfig配置bean基于注解的裝配自動裝配
SpringBean的裝配方式——基于XML的裝配2.10Spring提供兩種基于XML的裝配方式:設值注入和構造注入。在Spring實例化Bean的過程中,Spring首先會調用Bean的默認構造方法來實例化Bean對象,然后通過反射的方式調用setter方法來注入屬性值。因此,設值注入要求一個Bean必須滿足以下兩點要求:?Bean類必須提供一個默認的無參構造方法。?Bean類必須為需要注入的屬性提供對應的setter方法。使用設值注入時,需要在Spring配置文件中使用<bean>元素的子元素<property>來為每個屬性設置注入值。而使用構造注入時,需要使用<bean>元素的子元素<constructor-arg>來定義構造方法的參數,同時使用其value屬性(或子元素)設置該參數的值。示例:“第7章springIOC\代碼\07基于XML的裝配\spring_ioc”
SpringBean的裝配方式——基于JavaConfig配置bean2.10在Spring框架中,開發(fā)者還可以使用JavaConfig方式配置Bean。JavaConfig是從Spring3.0開始提供的一種配置Bean的方式,它使用Java代碼定義和配置Bean,以避免配置XML文件而帶來的繁瑣和復雜。JavaConfig的應用需要使用@Configuration注解標記一個Java配置類(可以替換applicationContext.xml),該類利用@Bean注解聲明SpringBean,被聲明的Bean會在Spring容器啟動時被自動創(chuàng)建并放入容器中,以供其它組件使用。示例:“第7章springIOC\代碼\08通過JavaConfig配置bean”
SpringBean的裝配方式——基于注解的裝配2.10為了進一步簡化SpringBean的裝配方式,踐行“約定大于配置”的思想,Spring還提供了基于注解的裝配方式。注解(Annotation)是在計算機程序中添加的一種元數據,用于為代碼元素(例如類、方法、變量等)提供補充說明或標記特定屬性或行為。它們以@符號開頭,通常放置在代碼元素的前面,以便在編譯時或運行時被解釋和處理。它是Java語言的一個強大特性,可以用于很多場景,如為代碼添加文檔、進行代碼檢查、指定依賴項、標記測試用例等。在Spring框架中,注解可以使開發(fā)者無需手動配置每個Bean之間的依賴關系,而是通過在類、字段、構造函數等位置添加特定的注解,Spring框架就可以自動掃描并創(chuàng)建和裝配Bean,從而避免手動編寫大量配置文件帶來的麻煩。
SpringBean的裝配方式——基于注解的裝配2.10注解作用@Autowired自動裝配Bean依賴@Component通用組件掃描注解@Controller聲明控制器類@Repository聲明數據訪問層類@Service聲明服務層類@Configuration定義配置類@Bean定義Bean對象@Value注入配置屬性值@Qualifier指定Bean名稱@Scope指定Bean作用域@PostConstruct在Bean初始化后執(zhí)行方法@PreDestroy在Bean銷毀前執(zhí)行方法@RequestMapping定義控制器請求映射@PathVariable獲取請求路徑中的參數@RequestParam獲取請求參數@ResponseBody響應請求結果@ResponseStatus定義響應狀態(tài)碼@ExceptionHandler處理控制器方法中的異常@Transactional聲明事務示例:“第7章springIOC\代碼\09基于注解的裝配\spring_ioc”
SpringBean的裝配方式——自動裝配2.10在Spring框架中,自動裝配(autowiring)是指將一個Bean自動注入到其他Bean的屬性中,以實現它們之間的依賴關系。Spring框架提供了多種自動裝配的方式,例如:在XML配置文件中,可以使用<bean>元素的autowire屬性來指定自動裝配的方式,如byName、byType等。在注解方式中,可以使用@Autowired、@Resource等注解來實現自動裝配。在JavaConfig配置中,可以使用@Configuration和@Bean注解來指定自動裝配的方式。自動裝配的好處在于它可以讓開發(fā)人員更加便捷地組合Bean,以減少手動配置的工作量,同時也避免因配置錯誤而引起的潛在問題。然而需要注意的是,在使用自動裝配時,應注意Bean的命名規(guī)范和類型匹配,以避免出現不必要的錯誤。
SpringBean的裝配方式——Spring自動裝配的方式2.10自動裝配方式特點byName根據依賴項的名稱進行自動裝配。需要依賴項的名稱和屬性名匹配。byType根據依賴項的類型進行自動裝配。如果容器中存在多個與屬性類型匹配的bean,則會拋出異常。constructor通過構造函數進行自動裝配。會根據構造函數參數的類型和名稱來匹配依賴項。autodetect默認方式,先嘗試按byType自動裝配,如果找不到再嘗試按byName自動裝配。需要注意的是,在使用byName和byType進行自動裝配時,需要在依賴項上添加@Autowired注解,而使用constructor自動裝配時,則不需要添加注解。此外,還可以使用@Qualifier注解來指定具體的依賴項名稱,以避免裝配時的歧義。E6636BC20180234D78A0072836F0BA7012B9B20215E26B50ACD98F3EB1392B551B4EBF38216C3B0222692E0838460BEBE009217A41D02B111BBFC23A765E14D124F449AD6A2784D7348224B76F624F873694ECB77C9D5FC1A8B6E19E00602C88DA962B9CCE3項目實現——用戶新建功能03項目整體結構3.1mapper目錄:該目錄下存放了DAO層實現,包含了UserMapper接口以及對應的UserMapper.xml文件,用于實現對用戶數據的增刪改查等操作。pojo目錄:該目錄下存放了實體類,主要有User用戶類,用于描述用戶的各個屬性。service目錄:該目錄下包含了業(yè)務層接口及其實現類,分別為IUserService和IUserServiceImpl,用于定義和實現與用戶相關的業(yè)務邏輯。resources目錄:該目錄下包含了配置文件,這里包含了MyBatis和Spring的配置文件,用于配置數據庫連接、Mapper掃描等相關信息。test目錄:該目錄下包含了DAO層和Service層的測試類,這些測試類都繼承了BaseTest類,用于測試相關類的正確性和可靠性。pom.xml:是Maven項目的核心配置文件,用于管理項目所需的依賴包和其他配置信息項目實現步驟3.2導入項目依賴包創(chuàng)建User類配置MybatisSpring整合Mybatis配置業(yè)務層Springbean的包掃描路徑數據訪問接口層(Dao)接口及實現業(yè)務層(Service)接口及實現測試類編寫E6636BC20180234D78A0072836F0BA7012B9B20215E26B50ACD98F3EB1392B551B4EBF38216C3B0222692E0838460BEBE009217A41D02B111BBFC23A765E14D124F449AD6A2784D7348224B76F624F873694ECB77C9D5FC1A8B6E19E00602C88DA962B9CCE3經典問題強化04經典問題強化4.11、哪種依賴注入方式建議使用,是構造器注入,還是Setter方法注入?對于選擇使用哪種依賴注入方式,可以根據具體的需求和場景進行選擇。一般來說,如果依賴項是必需的,或者對于一個對象只需要進行一次性注入,那么構造方法注入可能是更好的選擇。如果依賴項是可選的,或者需要在對象實例化后動態(tài)更改依賴項,那么Setter方法注入可能更合適。同時,也可以混合使用兩種方式來實現依賴注入,以達到更好的靈活性和可維護性。經典問題強化4.12、Spring框架中的單例Bean是線程安全的么?在Spring框架中,單例Bean是線程安全的,這是因為Spring容器會為每個單例Bean創(chuàng)建
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 中國電燒水壺市場全面調研及行業(yè)投資潛力預測報告
- 無線電監(jiān)測站建設項目可行性實施報告
- 中國陶瓷產品行業(yè)市場發(fā)展前景及發(fā)展趨勢與投資戰(zhàn)略研究報告(2024-2030)
- 2025年中國撒烈痛片行業(yè)市場發(fā)展前景及發(fā)展趨勢與投資戰(zhàn)略研究報告
- 2025年中國井礦精制鹽行業(yè)市場發(fā)展前景及發(fā)展趨勢與投資戰(zhàn)略研究報告
- 2025年中國有棚翻斗車行業(yè)市場發(fā)展前景及發(fā)展趨勢與投資戰(zhàn)略研究報告
- xx供水改造可行性研究報告
- 監(jiān)理建筑節(jié)能評估學習報告計劃
- 山東省青島市青島第二中學2025屆高一化學第二學期期末達標檢測模擬試題含解析
- 2025年中國食品乳化劑行業(yè)發(fā)展趨勢預測及投資戰(zhàn)略咨詢報告
- 部編版三年級語文上冊 寫字表
- 2025至2030中國糠酸行業(yè)發(fā)展趨勢分析與未來投資戰(zhàn)略咨詢研究報告
- 江西省上饒市廣信區(qū)2023-2024學年七年級下學期6月期末考試數學試卷(含答案)
- 糖尿病病人胰島素治療講課件
- 0號柴油安全技術說明書SDS
- GA/T 1454-2018信息安全技術網絡型流量控制產品安全技術要求
- 《體操—隊形隊列》單元教學計劃和教案
- 紹興市基準地價
- 土方回填施工組織設計方案
- 統(tǒng)計學原理賈俊平期末考試重點
- 病理科-生物安全管理制度
評論
0/150
提交評論