版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
SpringAOP概述動(dòng)態(tài)代理基于代理類的AOP實(shí)現(xiàn)基于XML的聲明式AspectJ基于注解的聲明式AspectJ第8章
SpringAOP2024/1/29學(xué)習(xí)目標(biāo)/Target2了解AOP的概念和作用
理解AOP術(shù)語
熟悉Spring中兩種動(dòng)態(tài)代理方式的區(qū)別
掌握基于代理類的AOP實(shí)現(xiàn)掌握基于XML的聲明式AspectJ和
基于注解的聲明式AspectJ章節(jié)概述/Summary3Spring的AOP模塊是Spring框架體系中十分重要的內(nèi)容,該模塊一般適用于具有橫切邏輯的場(chǎng)景,如訪問控制、事務(wù)管理和性能監(jiān)控等,本章將對(duì)SpringAOP的相關(guān)知識(shí)進(jìn)行詳細(xì)講解。目錄/CONTENTSSpringAOP概述基于XML的聲明式AspectJ基于代理類的AOP實(shí)現(xiàn)動(dòng)態(tài)代理4基于注解的聲明式AspectJ14325SpringAOP概述01第8章SpringAOP什么是AOP?SpringAOP簡介6
AOP的全稱是Aspect-OrientedProgramming,即面向切面編程(也稱面向方面編程)。它是面向?qū)ο缶幊蹋∣OP)的一種補(bǔ)充,目前已成為一種比較成熟的編程方式。在傳統(tǒng)的業(yè)務(wù)處理代碼中,通常都會(huì)進(jìn)行事務(wù)處理、日志記錄等操作。雖然使用OOP可以通過組合或者繼承的方式來達(dá)到代碼的重用,但如果要實(shí)現(xiàn)某個(gè)功能(如日志記錄),同樣的代碼仍然會(huì)分散到各個(gè)方法中。這樣,如果想要關(guān)閉某個(gè)功能,或者對(duì)其進(jìn)行修改,就必須要修改所有的相關(guān)方法。這不但增加了開發(fā)人員的工作量,而且提高了代碼的出錯(cuò)率。為了解決這一問題,AOP思想隨之產(chǎn)生。AOP采取橫向抽取機(jī)制,將分散在各個(gè)方法中的重復(fù)代碼提取出來,然后在程序編譯或運(yùn)行時(shí),再將這些提取出來的代碼應(yīng)用到需要執(zhí)行的地方。這種采用橫向抽取機(jī)制的方式,采用傳統(tǒng)的OOP思想顯然是無法辦到的,因?yàn)镺OP只能實(shí)現(xiàn)父子關(guān)系的縱向的重用。雖然AOP是一種新的編程思想,但卻不是OOP的替代品,它只是OOP的延伸和補(bǔ)充。SpringAOP簡介7未使用AOP的面向切面編程案例
例如,訂單系統(tǒng)中有添加訂單信息、更新訂單信息和刪除訂單信息3個(gè)方法,這3個(gè)方法中都包含事務(wù)管理業(yè)務(wù)代碼,訂單系統(tǒng)的邏輯如圖所示。Spring
AOP概述8SpringAOP簡介9
AOP的使用,使開發(fā)人員在編寫業(yè)務(wù)邏輯時(shí)可以專心于核心業(yè)務(wù),而不用過多的關(guān)注于其他業(yè)務(wù)邏輯的實(shí)現(xiàn),這不但提高了開發(fā)效率,而且增強(qiáng)了代碼的可維護(hù)性。類與切面的關(guān)系A(chǔ)OP面向切面編程的優(yōu)勢(shì)
由訂單系統(tǒng)可知,添加訂單信息、修改訂單信息、刪除訂單信息的方法體中都包含事務(wù)管理的業(yè)務(wù)邏輯,這就帶來了一定數(shù)量的重復(fù)代碼并使程序的維護(hù)成本增加?;贏OP的面向切面編程,可以為此類問題提供解決方案,AOP可以將事務(wù)管理的業(yè)務(wù)邏輯從這三個(gè)方法體中抽取到一個(gè)可重用的模塊,進(jìn)而降低橫向業(yè)務(wù)邏輯之間的耦合,減少重復(fù)代碼。AOP的使用,使開發(fā)人員在編寫業(yè)務(wù)邏輯時(shí)可以專心于核心業(yè)務(wù),而不用過多地關(guān)注其他業(yè)務(wù)邏輯的實(shí)現(xiàn),不但提高了開發(fā)效率,又增強(qiáng)了代碼的可維護(hù)性。Spring
AOP概述10AOP術(shù)語11Aspect:封裝的用于橫向插入系統(tǒng)功能(如事務(wù)、日志等)的類Joinpoint:在程序執(zhí)行過程中的某個(gè)階段點(diǎn)Pointcut:切面與程序流程的交叉點(diǎn),即那些需要處理的連接點(diǎn)Advice(通知/增強(qiáng)處理):AOP框架在特定的切入點(diǎn)執(zhí)行的增強(qiáng)處理,即在定義好的切入點(diǎn)處所要執(zhí)行的程序代碼??梢詫⑵淅斫鉃榍忻骖愔械姆椒āargetObject(目標(biāo)對(duì)象):指所有被通知的對(duì)象,也被稱為被增強(qiáng)對(duì)象。如果AOP框架采用的是動(dòng)態(tài)的AOP實(shí)現(xiàn),那么該對(duì)象就是一個(gè)被代理對(duì)象。Proxy(代理):將通知應(yīng)用到目標(biāo)對(duì)象之后,被動(dòng)態(tài)創(chuàng)建的對(duì)象。Weaving(織入):將切面代碼插入到目標(biāo)對(duì)象上,從而生成代理對(duì)象的過程。AOP術(shù)語
AOP并不是一個(gè)新的概念,AOP中涉及很多術(shù)語,如切面、連接點(diǎn)、切入點(diǎn)、通知/增強(qiáng)處理、目標(biāo)對(duì)象、織入、代理和引介等,下面針對(duì)AOP的常用術(shù)語進(jìn)行簡單介紹。
Spring
AOP術(shù)語切面(Aspect)切面是指關(guān)注點(diǎn)形成的類(關(guān)注點(diǎn)是指類中重復(fù)的代碼),通常是指封裝的、用于橫向插入系統(tǒng)的功能類(如事務(wù)管理、日志記錄等)。在實(shí)際開發(fā)中,該類被Spring容器識(shí)別為切面,需要在配置文件中通過<bean>元素指定。連接點(diǎn)(Joinpoint)連接點(diǎn)是程序執(zhí)行過程中某個(gè)特定的節(jié)點(diǎn),例如,某方法調(diào)用時(shí)或處理異常時(shí)。在SpringAOP中,一個(gè)連接點(diǎn)通常是一個(gè)方法的執(zhí)行。
切入點(diǎn)(Pointcut)當(dāng)某個(gè)連接點(diǎn)滿足預(yù)先指定的條件時(shí),AOP就能夠定位到這個(gè)連接點(diǎn),在連接點(diǎn)處插入切面,該連接點(diǎn)也就變成了切入點(diǎn)。通知/增強(qiáng)處理(Advice)通知/增強(qiáng)處理就是插入的切面程序代碼??梢詫⑼ㄖ?增強(qiáng)處理理解為切面中的方法,它是切面的具體實(shí)現(xiàn)。12AOP術(shù)語
AOP并不是一個(gè)新的概念,AOP中涉及很多術(shù)語,如切面、連接點(diǎn)、切入點(diǎn)、通知/增強(qiáng)處理、目標(biāo)對(duì)象、織入、代理和引介等,下面針對(duì)AOP的常用術(shù)語進(jìn)行簡單介紹。
Spring
AOP術(shù)語目標(biāo)對(duì)象(Target)目標(biāo)對(duì)象是指被插入切面的方法,即包含主業(yè)務(wù)邏輯的類對(duì)象?;蛘哒f是被一個(gè)或者多個(gè)切面所通知的對(duì)象??椚耄╓eaving)將切面代碼插入到目標(biāo)對(duì)象上,從而生成代理對(duì)象的過程??椚肟梢栽诰幾g時(shí),類加載時(shí)和運(yùn)行時(shí)完成。在編譯時(shí)進(jìn)行織入就是靜態(tài)代理,而在運(yùn)行時(shí)進(jìn)行織入則是動(dòng)態(tài)代理。代理(Proxy)將通知應(yīng)用到目標(biāo)對(duì)象之后,程序動(dòng)態(tài)創(chuàng)建的通知對(duì)象,就稱為代理。代理類既可能是和原類具有相同接口的類,也可能就是原類的子類,可以采用調(diào)用原類相同的方式調(diào)用代理類。引介(Introduction)引介是一種特殊的通知,它為目標(biāo)對(duì)象添加一些屬性和方法。這樣,即使一個(gè)業(yè)務(wù)類原本沒有實(shí)現(xiàn)某一個(gè)接口,通過AOP的引介功能,也可以動(dòng)態(tài)地為該業(yè)務(wù)類添加接口的實(shí)現(xiàn)邏輯,讓業(yè)務(wù)類成為這個(gè)接口的實(shí)現(xiàn)類。13動(dòng)態(tài)代理02第8章SpringAOPJDK動(dòng)態(tài)代理15
JDK動(dòng)態(tài)代理是通過java.lang.reflect.Proxy
類來實(shí)現(xiàn)的,我們可以調(diào)用Proxy類的newProxyInstance()方法來創(chuàng)建代理對(duì)象。對(duì)于使用業(yè)務(wù)接口的類,Spring默認(rèn)會(huì)使用JDK動(dòng)態(tài)代理來實(shí)現(xiàn)AOP。CGLIB代理16
通過前面的學(xué)習(xí)可知,JDK的動(dòng)態(tài)代理用起來非常簡單,但它是有局限性的,使用動(dòng)態(tài)代理的對(duì)象必須實(shí)現(xiàn)一個(gè)或多個(gè)接口。
那么,如何代理沒有實(shí)現(xiàn)接口的類?CGLIB代理17
CGLIB(CodeGenerationLibrary)是一個(gè)高性能開源的代碼生成包,它采用非常底層的字節(jié)碼技術(shù),對(duì)指定的目標(biāo)類生成一個(gè)子類,并對(duì)子類進(jìn)行增強(qiáng)。
如果想代理沒有實(shí)現(xiàn)接口的類,那么可以使用CGLIB代理。
JDK動(dòng)態(tài)代理存在缺陷,它只能為接口創(chuàng)建代理對(duì)象,當(dāng)需要為類創(chuàng)建代理對(duì)象時(shí),就需要使用CGLib(CodeGenerationLibrary)動(dòng)態(tài)代理,CGLib動(dòng)態(tài)代理不要求目標(biāo)類實(shí)現(xiàn)接口,它采用底層的字節(jié)碼技術(shù),通過繼承的方式動(dòng)態(tài)創(chuàng)建代理對(duì)象。Spring的核心包已經(jīng)集成了CGLib所需要的包,所以開發(fā)中不需要另外導(dǎo)入JAR包。JDK與CGLib動(dòng)態(tài)代理的比較18實(shí)現(xiàn)JDK動(dòng)態(tài)代理與CGLIB動(dòng)態(tài)代理的使用19需求說明使用JDK動(dòng)態(tài)代理與CGLIB動(dòng)態(tài)代理,對(duì)業(yè)務(wù)方法的執(zhí)行過程進(jìn)行模擬權(quán)限檢查、日志記錄。共性問題集中講解20常見問題及解決辦法代碼規(guī)范問題調(diào)試技巧共性問題集中講解基于代理類的AOP實(shí)現(xiàn)03第8章SpringAOPSpring的通知/增強(qiáng)類型22org.springframework.aop.MethodBeforeAdvice(前置通知/增強(qiáng))
在目標(biāo)方法執(zhí)行前實(shí)施增強(qiáng),可以應(yīng)用于權(quán)限管理等功能。org.springframework.aop.AfterReturningAdvice(后置通知/增強(qiáng))
在目標(biāo)方法執(zhí)行后實(shí)施增強(qiáng),可以應(yīng)用于關(guān)閉流、上傳文件、刪除
臨時(shí)文件等功能。ercept.MethodInterceptor(環(huán)繞通知/增強(qiáng))
在目標(biāo)方法執(zhí)行前后實(shí)施增強(qiáng),可以應(yīng)用于日志、事務(wù)管理等功能。org.springframework.aop.ThrowsAdvice(異常拋出通知/增強(qiáng))
在方法拋出異常后實(shí)施增強(qiáng),可以應(yīng)用于處理異常記錄日志等功能。org.springframework.aop.IntroductionInterceptor(引介通知/增強(qiáng))
在目標(biāo)類中添加一些新的方法和屬性,可以應(yīng)用于修改老版本程序。
Spring按照通知在目標(biāo)類方法的連接點(diǎn)位置,可以分為5種類型,具體如下:ProxyFactoryBean23
ProxyFactoryBean是FactoryBean接口的實(shí)現(xiàn)類,F(xiàn)actoryBean負(fù)責(zé)實(shí)例化一個(gè)Bean,而ProxyFactoryBean負(fù)責(zé)為其他Bean創(chuàng)建代理實(shí)例。在Spring中,使用ProxyFactoryBean是創(chuàng)建AOP代理的基本方式。ProxyFactoryBean類中的常用可配置屬性如下:使用基于代理類的AOP實(shí)現(xiàn)模擬權(quán)限檢查、
日志記錄功能24需求說明使用基于代理類的AOP對(duì)業(yè)務(wù)方法的執(zhí)行過程進(jìn)行模擬權(quán)限檢查、日志記錄。共性問題集中講解25常見問題及解決辦法代碼規(guī)范問題調(diào)試技巧共性問題集中講解基于XML的
聲明式AspectJ04第8章SpringAOPAspectJ開發(fā)27
AspectJ是一個(gè)基于Java語言的AOP框架,它提供了強(qiáng)大的AOP功能。Spring2.0以后,SpringAOP引入了對(duì)AspectJ的支持,并允許直接使用AspectJ進(jìn)行編程,而Spring自身的AOPAPI也盡量與AspectJ保持一致。新版本的Spring框架,也建議使用AspectJ來開發(fā)AOP。使用AspectJ實(shí)現(xiàn)AOP有兩種方式:一種是基于XML的聲明式AspectJ,另一種是基于注解的聲明式AspectJ。概述使用AOP代理對(duì)象的好處
因?yàn)镾pringAOP中的代理對(duì)象由IoC容器自動(dòng)生成,所以開發(fā)者無須過多關(guān)注代理對(duì)象生成的過程,只需選擇連接點(diǎn)、創(chuàng)建切面、定義切點(diǎn)并在XML文件中添加配置信息即可。Spring提供了一系列配置SpringAOP的XML元素。
基于XMl的AOP實(shí)現(xiàn)28配置SpringAOP的XML元素29元素描述<aop:config>SpringAOP配置的根元素<aop:aspect>配置切面<aop:advisor>配置通知器<aop:pointcut>配置切點(diǎn)<aop:before>配置前置通知,在目標(biāo)方法執(zhí)行前實(shí)施增強(qiáng),可以應(yīng)用于權(quán)限管理等功能<aop:after>配置后置通知,在目標(biāo)方法執(zhí)行后實(shí)施增強(qiáng),可以應(yīng)用于關(guān)閉流、上傳文件、刪除臨時(shí)文件等功能<aop:around>配置環(huán)繞方式,在目標(biāo)方法執(zhí)行前后實(shí)施增強(qiáng),可以應(yīng)用于日志、事務(wù)管理等功能<aop:after-returning>配置返回通知,在目標(biāo)方法成功執(zhí)行之后調(diào)用通知<aop:after-throwing>配置異常通知,在方法拋出異常后實(shí)施增強(qiáng),可以應(yīng)用于處理異常記錄日志等功能基于XML的聲明式AspectJ是指通過XML文件來定義切面、切入點(diǎn)及通知,所有的切面、切入點(diǎn)和通知都必須定義在<aop:config>元素內(nèi)。基于XML的聲明式AspectJ30<aop:config>元素及其子元素如下:小提示:圖中灰色部分標(biāo)注的元素即為常用的配置元素
XML文件中常用元素的配置方式如下:基于XML的聲明式AspectJ31<beanid="myAspect"class="com.test.aspectj.xml.MyAspect"/><aop:config><aop:aspectid="aspect"ref="myAspect"><aop:pointcutexpression="execution(*com.test.jdk.*.*(..))“id="myPointCut"/><aop:beforemethod="myBefore"pointcut-ref="myPointCut"/><aop:after-returningmethod="myAfterReturning“pointcut-ref="myPointCut" returning="returnVal"/><aop:aroundmethod="myAround"pointcut-ref="myPointCut"/><aop:after-throwingmethod="myAfterThrowing“pointcut-ref="myPointCut" throwing="e"/><aop:aftermethod="myAfter"pointcut-ref="myPointCut"/></aop:aspect></aop:config>定義切面Bean配置切面配置切入點(diǎn)配置通知配置切面
在Spring的配置文件中,配置切面使用的是<aop:aspect>元素,該元素會(huì)將一個(gè)已定義好的SpringBean轉(zhuǎn)換成切面Bean,因此,在使用<aop:aspect>元素之前,要在配置文件中先定義一個(gè)普通的SpringBean。SpringBean定義完成后,通過<aop:aspect>元素的ref屬性即可引用該Bean。配置<aop:aspect>元素時(shí),通常會(huì)指定id和ref兩個(gè)屬性。
基于XML的聲明式AspectJ32<aop:aspect>元素的id屬性和ref屬性的描述基于XML的聲明式AspectJ33屬性名稱描述id用于定義該切面的唯一標(biāo)識(shí)ref用于引用普通的SpringBean配置切入點(diǎn)
在Spring的配置文件中,切入點(diǎn)是通過<aop:pointcut>元素來定義的。當(dāng)<aop:pointcut>元素作為<aop:config>元素的子元素定義時(shí),表示該切入點(diǎn)是全局的,它可被多個(gè)切面共享;當(dāng)<aop:pointcut>元素作為<aop:aspect>元素的子元素時(shí),表示該切入點(diǎn)只對(duì)當(dāng)前切面有效。定義<aop:pointcut>元素時(shí),通常會(huì)指定id、expression屬性。
基于XML的聲明式AspectJ34<aop:pointcut>元素的id屬性和expression屬性描述基于XML的聲明式AspectJ35屬性名稱描述id用于指定切入點(diǎn)的唯一標(biāo)識(shí)expression用于指定切入點(diǎn)關(guān)聯(lián)的切入點(diǎn)表達(dá)式基于XML的聲明式AspectJ36切入點(diǎn)表達(dá)式
execution(*com.test.jdk.*.*(..))是定義的切入點(diǎn)表達(dá)式,該切入點(diǎn)表達(dá)式的意思是匹配com.test.jdk包中任意類的任意方法的執(zhí)行。execution(modifiers-pattern?ret-type-patterndeclaring-type-pattern?name-pattern(param-pattern)throws-pattern?)表達(dá)式的主體返回類型,使用*代表所有類型需要攔截的包名類名,使用*代表所有類方法名,使用*代表所有方法方法的參數(shù),其中的“..”表示任意參數(shù)注意:這里有一個(gè)空格切入點(diǎn)表達(dá)式的基本格式:定義的目標(biāo)方法的訪問修飾符,如public、private等定義的目標(biāo)方法的返回值類型,如void、String等定義的目標(biāo)方法的類路徑,如com.test.jdk.UserDaoImpl具體需要被代理的目標(biāo)方法,如add()方法需要被代理的目標(biāo)方法包含的參數(shù)需要被代理的目標(biāo)方法拋出的異常類型小提示:帶有問號(hào)(?)的部分表示可配置項(xiàng),而其他部分屬于必須配置項(xiàng)。execution表達(dá)式各部分參數(shù)說明modifiers-pattern:表示定義的目標(biāo)方法的訪問修飾符,如public、private等。ret-type-pattern:表示定義的目標(biāo)方法的返回值類型,如void、String等。declaring-type-pattern:表示定義的目標(biāo)方法的類路徑,如com.test.jdk.UserDaoImpl。name-pattern:表示具體需要被代理的目標(biāo)方法,如add()方法。param-pattern:表示需要被代理的目標(biāo)方法包含的參數(shù),本章示例中目標(biāo)方法參數(shù)都為空。throws-pattern:表示需要被代理的目標(biāo)方法拋出的異常類型。
基于XML的聲明式AspectJ37execution(modifiers-pattern?ret-type-patterndeclaring-type-pattern?name-pattern(param-pattern)throws-pattern?)配置通知
在Spring的配置文件中,使用<aop:aspect>元素配置了5種常用通知,分別為前置通知、后置通知、環(huán)繞通知、返回通知和異常通知。
基于XML的聲明式AspectJ38<aop:aspect>元素的常用屬性基于XML的聲明式AspectJ39屬性描述pointcut該屬性用于指定一個(gè)切入點(diǎn)表達(dá)式,Spring將在匹配該表達(dá)式的連接點(diǎn)時(shí)織入該通知。pointcut-ref該屬性指定一個(gè)已經(jīng)存在的切入點(diǎn)名稱,如配置代碼中的myPointCut。通常pointcut和pointcut-ref兩個(gè)屬性只需要使用其中一個(gè)即可。method該屬性指定一個(gè)方法名,指定將切面Bean中的該方法轉(zhuǎn)換為增強(qiáng)處理。throwing該屬性只對(duì)<after-throwing>元素有效,它用于指定一個(gè)形參名,異常通知方法可以通過該形參訪問目標(biāo)方法所拋出的異常。returning該屬性只對(duì)<after-returning>元素有效,它用于指定一個(gè)形參名,后置通知方法可以通過該形參訪問目標(biāo)方法的返回值。使用SpringAOP實(shí)現(xiàn)日志記錄功能40需求說明使用前置增強(qiáng)處理和后置增強(qiáng)處理對(duì)業(yè)務(wù)方法的執(zhí)行過程進(jìn)行日志記錄。提示(1)在項(xiàng)目中添加與Spring
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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上半年四川省達(dá)州市事業(yè)單位招聘(1978人)歷年高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025上半年四川涼山州金陽縣事業(yè)單位招聘工作人員9人歷年高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025上半年“才聚齊魯成就未來”泰山財(cái)產(chǎn)保險(xiǎn)股份限公司社會(huì)招聘14人高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025“才聚齊魯成就未來”山東海洋集團(tuán)限公司“筑夢(mèng)海洋”夏季校園招聘16人高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025年度廣東省勞動(dòng)合同法律援助與維權(quán)合同
- 2025年度多子女共同贍養(yǎng)老人并設(shè)立贍養(yǎng)保險(xiǎn)合同3篇
- 2025年度地暖設(shè)備生產(chǎn)加工與質(zhì)量控制合同3篇
- 2025年度高層建筑幕墻玻璃定制安裝施工合同2篇
- 2025年度大型影視制作制片助理場(chǎng)記聘用合同
- 2025年度孩子上學(xué)輔導(dǎo)與興趣培養(yǎng)勞務(wù)合同模板
- 2024年-2025年《農(nóng)作物生產(chǎn)技術(shù)》綜合知識(shí)考試題庫及答案
- 洗衣房工作人員崗位職責(zé)培訓(xùn)
- 廣東省廣州市白云區(qū)2022-2023學(xué)年八年級(jí)上學(xué)期物理期末試卷(含答案)
- 醫(yī)學(xué)細(xì)胞生物學(xué)(溫州醫(yī)科大學(xué))知到智慧樹章節(jié)答案
- XX小區(qū)春節(jié)燈光布置方案
- 《廣西壯族自治區(qū)房屋建筑和市政工程施工招標(biāo)文件范本(2023年版)》
- 誠信講堂課件教學(xué)課件
- 2024年二級(jí)建造師考試建筑工程管理與實(shí)務(wù)試題及解答參考
- 生產(chǎn)車間關(guān)鍵崗位培訓(xùn)
- 湖州師范學(xué)院《中學(xué)歷史教學(xué)論》2023-2024學(xué)年第一學(xué)期期末試卷
- 汽車乘員仿真RAMSIS操作指南
評(píng)論
0/150
提交評(píng)論