




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
項(xiàng)目一初識(shí)Spring認(rèn)識(shí)Spring目錄Content1Spring依賴注入2需求的不斷變化項(xiàng)目導(dǎo)言零面臨新的挑戰(zhàn)最主流開發(fā)框架Spring入門學(xué)習(xí)目標(biāo)零知識(shí)目標(biāo)了解Spring的優(yōu)點(diǎn);熟悉Spring的下載安裝與結(jié)構(gòu)目錄;熟悉Spring的控制反轉(zhuǎn)與bean的注入方式;了解Spring中AOP的概念;熟悉Spring中AOP的使用方法。能力目標(biāo)具備Spring相關(guān)依賴的下載的能力;具備創(chuàng)建Spring項(xiàng)目的能力;具備使用Spring中bean注入方式的能力;具備使用Spring進(jìn)行面向切面編程的能力;具備基于XML配置方式的能力。素質(zhì)目標(biāo)具備精益求精、堅(jiān)持不懈的精神;具有獨(dú)立解決問題的能力;具備靈活的思維和處理分析問題的能力;具有責(zé)任心。任務(wù)1:認(rèn)識(shí)Spring壹Spring概述任務(wù)技能Spring是開源應(yīng)用程序框架。Spring的依賴注入容器、AOP實(shí)現(xiàn)和對(duì)持久化層的支持。來解決企業(yè)應(yīng)用程序開發(fā)復(fù)雜性。Spring加載方式Spring的依賴管理,使用Maven或者Gradle等構(gòu)建工具來管理依賴關(guān)系。管理Spring的依賴關(guān)系使用定位并下載大量的jar包來使用Spring。對(duì)于基本的依賴注入那只需要一個(gè)必須的外部依賴--日志任務(wù)1-1:Spring概述壹1什么是SpringSpring是一款流行的開源應(yīng)用程序框架,可以幫助開發(fā)者構(gòu)建高效的企業(yè)級(jí)應(yīng)用程序。Spring框架的核心是IoC(inversionofcontrol)和AOP(aspect-orientedprogramming)容器,IOC-控制反轉(zhuǎn)避免對(duì)象之間的耦合避免應(yīng)用程序依賴于容器的功能AOP-面向切片編程它們可以幫助開發(fā)者實(shí)現(xiàn)松散耦合和面向切面的編程,從而使得應(yīng)用程序更加易于測(cè)試和維護(hù)。Spring是一個(gè)全面的解決方案。但它堅(jiān)持一個(gè)原則:不重新造輪子。任務(wù)1-1:Spring概述壹2Spring模塊下圖描述了SpringFramework包含的內(nèi)容。組成Spring框架的每個(gè)模塊(或組件)都可以單獨(dú)存在,或者與其他一個(gè)或多個(gè)模塊聯(lián)合實(shí)現(xiàn)。任務(wù)1-1:Spring概述壹3Spring的優(yōu)點(diǎn)提供了一個(gè)一致的編程模型。旨在促進(jìn)代碼重用。旨在促進(jìn)面向?qū)ο蟮脑O(shè)計(jì)。致力于推動(dòng)好的編程習(xí)慣,如用接口編程。Spring改進(jìn)了從Java代碼中提取配置值到XML或者屬性文件中的方法。32145任務(wù)1-1:Spring概述壹在項(xiàng)目中引入Spring可以帶來的好處如下所示:降低組件之間的耦合度,實(shí)現(xiàn)軟件各層之間的解耦??梢允褂萌萜魈峁┑谋姸喾?wù),如:事務(wù)管理服務(wù)、消息服務(wù)等等。當(dāng)使用容器管理事務(wù)時(shí),開發(fā)人員就不再需要手工控制事務(wù)。也不需處理復(fù)雜的事務(wù)傳播。容器提供單例模式支持,開發(fā)人員不再需要自己編寫實(shí)現(xiàn)代碼。容器提供了AOP技術(shù),利用它很容易實(shí)現(xiàn)如權(quán)限攔截、運(yùn)行期監(jiān)控等功能。容器提供的眾多輔助類,使用這些類能夠加快應(yīng)用的開發(fā),如:JdbcTemplate、HibernateTemplate。Spring對(duì)于主流的應(yīng)用框架提供了集成支持,如:集成Hibernate、JPA、Struts等,這樣更便于應(yīng)用的開發(fā)。321456任務(wù)1-2:Spring加載方式壹Spring的依賴管理,可以幫助我們更好地管理應(yīng)用程序中的依賴關(guān)系。
在Spring中,可以使用Maven或者Gradle等構(gòu)建工具來管理依賴關(guān)系。如果使用Spring,需要獲得Spring的jar包,其中要包括需要使用的Spring的模塊。在社區(qū)下載點(diǎn)/downloads/community。Maven的中央庫,也是Maven默認(rèn)檢索的資源庫企業(yè)級(jí)資源庫(EnterpriseBundleRepository,EBR),同時(shí)也提供了和Spring整合的所有類庫。在AmazonS3為開發(fā)和里程碑版本發(fā)布(最終發(fā)布的版本這里也會(huì)有)而設(shè)置的公共Maven資源庫。任務(wù)1-3:管理Spring的依賴關(guān)系壹對(duì)于基本的依賴注入那只需要一個(gè)必須的外部依賴,就是日志。如果使用的是Maven,可以在pom.xml文件中添加以下內(nèi)容來管理Spring的依賴關(guān)系,代碼如下所示。<dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.3.10</version></dependency></dependencies>如果您使用的是Gradle,可以在build.gradle文件中添加以下內(nèi)容來管理Spring的依賴關(guān)系:dependencies{implementation'org.springframework:spring-context:5.3.10'}任務(wù)2:Spring依賴注入貳Spring控制反轉(zhuǎn)任務(wù)技能Spring是一個(gè)開源的控制反轉(zhuǎn)(InversionofControl,IoC)和面向切面(AOP)的容器框架。它的主要目的是簡(jiǎn)化企業(yè)開發(fā)。bean注入方式依賴注入的作用就是在使用Spring框架創(chuàng)建對(duì)象時(shí),動(dòng)態(tài)的將其所依賴的對(duì)象注入到Bean組件中,bean作用域Bean的作用域定義了Bean在我們使用它的上下文中的生命周期和可見性。任務(wù)2-1:Spring控制反轉(zhuǎn)貳
Spring是一個(gè)開源的控制反轉(zhuǎn)(InversionofControl,IoC)和面向切面(AOP)的容器框架。它的主要目的是簡(jiǎn)化企業(yè)開發(fā)。0102IOC01控制反轉(zhuǎn)模式(也稱作依賴性介入)表示不創(chuàng)建對(duì)象,但是描述創(chuàng)建它們的方式。IOC容器02Spring的一個(gè)核心特性是IOC。,它的基本思想是將對(duì)象的創(chuàng)建、管理和依賴關(guān)系的處理從業(yè)務(wù)邏輯中分離出來,交由IOC容器來完成。任務(wù)2-2:bean注入方式貳
依賴注入(DependencyInject,縮寫DI)就是由IoC容器在運(yùn)行期間動(dòng)態(tài)地將某種依賴資源注入對(duì)象之中。在Spring中,依賴注入的作用就是在使用Spring框架創(chuàng)建對(duì)象時(shí),動(dòng)態(tài)的將其所依賴的對(duì)象注入到Bean組件中。有三種主要的Bean注入方式:0102構(gòu)造函數(shù)注入Setter方法注入字段注入任務(wù)2-2:bean注入方式貳
通過構(gòu)造函數(shù)注入,需要在Bean定義時(shí)指定Bean所需的依賴關(guān)系。SpringIOC容器會(huì)在創(chuàng)建Bean時(shí)自動(dòng)調(diào)用對(duì)應(yīng)的構(gòu)造函數(shù),并將所需的依賴關(guān)系作為參數(shù)傳遞進(jìn)去。示例代碼如下:0102publicclassExampleBean{privatefinalDependencydependency;publicExampleBean(Dependencydependency){this.dependency=dependency;}}<beanid="exampleBean"class="com.example.ExampleBean"><constructor-argref="dependency"/></bean>1構(gòu)造函數(shù)注入任務(wù)2-2:bean注入方式貳
通過Setter方法注入,需要在Bean定義中指定Bean所需的依賴關(guān)系,并且為Bean定義對(duì)應(yīng)的Setter方法。SpringIOC容器會(huì)在創(chuàng)建Bean后,自動(dòng)調(diào)用Bean的Setter方法,并將所需的依賴關(guān)系作為方法參數(shù)傳遞進(jìn)去。示例代碼如下:0102publicclassExampleBean{privateDependencydependency;publicvoidsetDependency(Dependencydependency){this.dependency=dependency;}}<beanid="exampleBean"class="com.example.ExampleBean"><propertyname="dependency"ref="dependency"/></bean>2Setter方法注入任務(wù)2-2:bean注入方式貳
通過字段注入,需要在Bean定義中指定Bean所需的依賴關(guān)系,并將依賴關(guān)系標(biāo)記為@Autowired或@Resource等注解。SpringIOC容器會(huì)自動(dòng)掃描Bean中所有需要注入的字段,并將所需的依賴關(guān)系自動(dòng)注入進(jìn)去。示例代碼如下:publicclassExampleBean{@AutowiredprivateDependencydependency;}<beanid="exampleBean"class="com.example.ExampleBean"></bean>3字段注入任務(wù)2-3:bean作用域貳bean作用域概述Bean的作用域定義了Bean在我們使用它的上下文中的生命周期和可見性。Spring框架的最新版本定義了6種作用域:singleton、prototype、request、session、application和websocket。其中,后四種作用域僅在Web感知應(yīng)用程序中可用?。任務(wù)2-3:bean作用域貳Singleton作用域和Prototype作用域是Spring框架中兩種常用的Bean作用域。Singleton作用域
每次通過getBean()方法獲取該實(shí)例時(shí),都返回同一個(gè)實(shí)例。適用于那些需要在整個(gè)應(yīng)用程序中共享的對(duì)象,例如數(shù)據(jù)庫連接池、線程池等。可能存在線程安全的問題,需要注意并發(fā)訪問的情況。Prototype作用域
每次通過getBean()方法獲取該實(shí)例時(shí),都返回一個(gè)新的實(shí)例。適用于那些需要在每次請(qǐng)求時(shí)都重新初始化的對(duì)象,例如請(qǐng)求參數(shù)封裝類、臨時(shí)計(jì)算結(jié)果等。每次獲取實(shí)例時(shí)都會(huì)創(chuàng)建新的對(duì)象,不會(huì)存在線程安全的問題。任務(wù)2-3:bean作用域貳【示例】演示Singleton作用域和Prototype作用域首先,創(chuàng)建一個(gè)名為SingletonBean的類,使用@Component注解將其標(biāo)記為一個(gè)組件,并將作用域設(shè)置為Singleton。@Component@Scope("singleton")publicclassSingletonBean{privateintcount=0;publicvoidincrement(){count++;}publicvoidshowMessage(){System.out.println("SingletonBean:Count="+count);}}任務(wù)2-3:bean作用域貳然后,創(chuàng)建一個(gè)名為PrototypeBean的類,使用@Component注解將其標(biāo)記為一個(gè)組件,并將作用域設(shè)置為Prototype。@Component@Scope("prototype")publicclassPrototypeBean{privateintcount=0;publicvoidincrement(){count++;}publicvoidshowMessage(){System.out.println("PrototypeBean:Count="+count);}}任務(wù)2-3:bean作用域貳接下來,創(chuàng)建一個(gè)名為Main的類,使用@Autowired注解將SingletonBean和PrototypeBean注入進(jìn)來,并進(jìn)行測(cè)試。@ComponentpublicclassMain{@AutowiredprivateSingletonBeansingletonBean;@AutowiredprivatePrototypeBeanprototypeBean;publicvoidrun(){//SingletonBeansingletonBean.increment();singletonBean.showMessage();
//PrototypeBeanprototypeBean.increment();prototypeBean.showMessage();
//PrototypeBeanprototypeBean.increment();prototypeBean.showMessage();//SingletonBeansingletonBean.increment();singletonBean.showMessage();}}任務(wù)2-3:bean作用域貳最后,在應(yīng)用程序的入口處,創(chuàng)建一個(gè)ApplicationContext對(duì)象,并使用getBean()方法獲取Main實(shí)例,然后調(diào)用run()方法。publicclassApplication{publicstaticvoidmain(String[]args){ApplicationContextcontext=newAnnotationConfigApplicationContext(AppConfig.class);Mainmain=context.getBean(Main.class);main.run();}}
任務(wù)2-3:bean作用域貳運(yùn)行應(yīng)用程序,輸出結(jié)果如圖可以看到,SingletonBean是一個(gè)單例,每次調(diào)用increment()方法后,count的值會(huì)被保留下來。而PrototypeBean是一個(gè)原型,每次調(diào)用increment()方法后,count的值會(huì)被重新初始化。任務(wù)3:Spring中的AOP叁AOP簡(jiǎn)介任務(wù)技能AOP模塊提供了一個(gè)符合AOP聯(lián)盟標(biāo)準(zhǔn)的面向切面編程的實(shí)現(xiàn)。AOP中的概念A(yù)OP中涉及很多術(shù)語,如切面、連接點(diǎn)、切入點(diǎn)、通知、目標(biāo)對(duì)象、織入、引入等使用Spring進(jìn)行面向切面編程要進(jìn)行AOP編程,首先我們要在Spring的配置文件中引入aop命名空間。任務(wù)3-1:AOP簡(jiǎn)介叁為什么需要AOP?人腦的“內(nèi)存”也是有限的,如果把所有相關(guān)聯(lián)的事情像煮臘八粥一樣一股腦放在一塊兒,別說找出解決方案了,不會(huì)被逼瘋的就是高人!通過依賴注入,在編寫程序的時(shí)候,我們不用關(guān)心依賴的組件是怎么實(shí)現(xiàn)的了。任務(wù)3-1:AOP簡(jiǎn)介叁先來看下面的程序代碼:publicvoiddoSomeBusiness(longlParam,StringsParam){ //記錄日志 ("調(diào)用doSomeBusiness方法,參數(shù)是:"+lParam); //參數(shù)合法性驗(yàn)證 if(lParam<=0){ thrownewIllegalArgumentException("xx應(yīng)該大于0"); } if(sParam==null||sParam.trim().equals("")){ thrownewIllegalArgumentException("xx不能為空"); } //異常處理 try{ //真正的業(yè)務(wù)邏輯代碼在這里... //事務(wù)控制 mit(); }catch(Exceptione){ //... tx.rollback(); }}1任務(wù)3-1:AOP簡(jiǎn)介叁如果需要修改系統(tǒng)日志的格式,或者安全驗(yàn)證的策略,為了保證系統(tǒng)可用,就要在每個(gè)業(yè)務(wù)方法里都反反復(fù)復(fù)地編寫這些代碼嗎?考慮復(fù)雜的業(yè)務(wù)已經(jīng)讓人頭大了,再處理這些方方面面的事情,寫出來的代碼既難讀,質(zhì)量又沒保障。我們?cè)鯓硬拍軐P脑谡嬲臉I(yè)務(wù)邏輯上呢?這正是AOP要解決的問題!2什么是AOPAOP是Aspect-OrientedProgrmming的簡(jiǎn)稱,意思是面向方面編程。在業(yè)務(wù)系統(tǒng)中,總有一些散落、滲透到系統(tǒng)各處而且不得不處理的事情,比如安全驗(yàn)證。需要在頁面上判斷用戶是否登錄、當(dāng)前登錄用戶是否有權(quán)限訪問該頁面,在Action代碼里還要限制用戶是否通過直接在URL輸入路徑中繞過了頁面的權(quán)限控制代碼,甚至在業(yè)務(wù)層代碼里,還要限制不同用戶訪問的不同數(shù)據(jù)。任務(wù)3-1:AOP簡(jiǎn)介叁與此類似,日志、事務(wù)、安全驗(yàn)證等這些通用的、散布在系統(tǒng)各處的需要,以及在實(shí)現(xiàn)業(yè)務(wù)系統(tǒng)時(shí)關(guān)注的事情就稱為“方面”,也稱為“關(guān)注點(diǎn)”,如圖所示。如果能把這些“方面”集中處理,那樣既能減少“方面”代碼里的錯(cuò)誤,又能保證我們?cè)诰帉憳I(yè)務(wù)邏輯代碼時(shí)專心做事,“方面”處理策略發(fā)生改變時(shí)還能統(tǒng)一做出修改,這就是AOP要做的事情。從系統(tǒng)中分離出方面,然后集中實(shí)現(xiàn)。從而可以獨(dú)立編寫業(yè)務(wù)邏輯代碼和方面代碼,在系統(tǒng)運(yùn)行的時(shí)候,再將方面代碼“織入”到系統(tǒng)中。任務(wù)3-1:AOP簡(jiǎn)介叁3如何使用AOP切點(diǎn)是程序執(zhí)行過程中的一個(gè)特定點(diǎn),例如方法調(diào)用、異常處理或變量賦值等。在AOP中,切點(diǎn)用于確定何時(shí)應(yīng)用橫切關(guān)注點(diǎn)。定義切點(diǎn)橫切關(guān)注點(diǎn)是一組操作,它們可以應(yīng)用于切點(diǎn)定義的方法、類或其他程序元素。橫切關(guān)注點(diǎn)通常包括日志記錄、安全性檢查、性能測(cè)量等。定義橫切關(guān)注點(diǎn)通知是在代理對(duì)象上定義的一組橫切關(guān)注點(diǎn)的邏輯實(shí)現(xiàn)。通知可以是一個(gè)方法調(diào)用,也可以是一個(gè)切面。應(yīng)用通知代理對(duì)象是應(yīng)用程序的一部分,它代表了被橫切關(guān)注點(diǎn)影響的程序元素。在AOP中,代理對(duì)象通常是通過使用JDK動(dòng)態(tài)代理或CGLIB生成的。配置代理對(duì)象任務(wù)3-1:AOP簡(jiǎn)介叁使用SpringAOP來記錄日志示例代碼如下所示。//定義切點(diǎn)@Pointcut("execution(*com.example.service.*.*(..))")publicvoidserviceMethod(){}//定義橫切關(guān)注點(diǎn)@Before("serviceMethod()")publicvoidlogRequest(){//記錄請(qǐng)求信息}//在Spring配置文件中啟用AOP<aop:aspectj-autoproxy/>//在需要進(jìn)行日志記錄的服務(wù)方法中調(diào)用logRequest()方法即可publicvoiddoSomething(){//...logRequest();}任務(wù)3-2:AOP中的概念叁對(duì)AOP的常用術(shù)語Aspect(切面)切面指橫切性關(guān)注點(diǎn)的抽象JoinPoint(連接點(diǎn))指那些被攔截到的點(diǎn)Pointcut(切入點(diǎn))是指我們要對(duì)哪些連接點(diǎn)進(jìn)行攔截的定義Advice(通知)指攔截到連接點(diǎn)之后所要做的事情Target(目標(biāo)對(duì)象)代理的目標(biāo)對(duì)象Weave(織入)將切面應(yīng)用到目標(biāo)對(duì)象的過程Introduction(引入)可為目標(biāo)對(duì)象添加一些屬性和方法任務(wù)3-3:使用Spring進(jìn)行面向切面編程叁要進(jìn)行AOP編程,首先我們要在Spring的配置文件中引入aop命名空間,示例配置文件代碼如下所示:<bea
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 羊駝創(chuàng)意畫課件
- 山西省平遙縣綜合職業(yè)技術(shù)學(xué)校2024-2025學(xué)年高三第二學(xué)期期終調(diào)研測(cè)試文生物試題試卷含解析
- 河北東方學(xué)院《文化人類學(xué)》2023-2024學(xué)年第二學(xué)期期末試卷
- 甘肅省會(huì)寧一中2025屆高三下學(xué)期4月月考化學(xué)試題含解析
- 南陽理工學(xué)院《統(tǒng)計(jì)分析與軟件應(yīng)用》2023-2024學(xué)年第一學(xué)期期末試卷
- 唐山學(xué)院《太陽能發(fā)電技術(shù)》2023-2024學(xué)年第二學(xué)期期末試卷
- 內(nèi)蒙古化工職業(yè)學(xué)院《企業(yè)戰(zhàn)略思考與行動(dòng)系列講座》2023-2024學(xué)年第二學(xué)期期末試卷
- 海東市重點(diǎn)中學(xué)2024-2025學(xué)年高考預(yù)測(cè)卷(全國(guó)I卷)數(shù)學(xué)試題試卷含解析
- 福建省六校2025年高三下第三次月考物理試題含解析
- 湖北大學(xué)知行學(xué)院《數(shù)學(xué)物理方法1》2023-2024學(xué)年第一學(xué)期期末試卷
- 事業(yè)單位固定資產(chǎn)購置流程圖
- 變壓器生產(chǎn)工藝
- 融創(chuàng)文旅集團(tuán)出差管理制度(培訓(xùn)課件)
- 基坑監(jiān)測(cè)周報(bào)
- 客戶信用等級(jí)評(píng)價(jià)表
- CCTV雨污水管道檢測(cè)缺陷內(nèi)容判斷依據(jù)判斷標(biāo)準(zhǔn)
- 《青少年管弦樂隊(duì)指南》.PPT
- 合規(guī)管理有效性評(píng)估表
- 應(yīng)急管理試題庫
- 苯的加成精彩動(dòng)畫演示教學(xué)課件
- 輸電線路驗(yàn)收典型缺陷識(shí)別
評(píng)論
0/150
提交評(píng)論