Java Web 開發(fā)從入門到實踐課件 第12章 - Maven和Spring Boot框架_第1頁
Java Web 開發(fā)從入門到實踐課件 第12章 - Maven和Spring Boot框架_第2頁
Java Web 開發(fā)從入門到實踐課件 第12章 - Maven和Spring Boot框架_第3頁
Java Web 開發(fā)從入門到實踐課件 第12章 - Maven和Spring Boot框架_第4頁
Java Web 開發(fā)從入門到實踐課件 第12章 - Maven和Spring Boot框架_第5頁
已閱讀5頁,還剩63頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

JavaWeb開發(fā)從入門到實踐JavaWebDevelopmentFromIntroductiontoPracticeMaven和SpringBoot框架Chap12提綱Maven和SpringBoot框架本章介紹了Maven項目管理工具用于自動化構建和依賴管理,SpringBoot簡化了Spring應用的開發(fā)與配置,并通過IoC/DI和AOP機制提供了靈活的依賴管理和功能增強,幫助開發(fā)者高效構建現(xiàn)代Java應用。12.1Maven項目管理工具12.2SpringBoot入門12.3SpringBoot應用12.4Spring之IoC/DI12.5Spring之AOP12.6本章小結12.1Maven項目管理工具12.1.1Maven簡介12.1.2IDEA集成Maven12.1.3使用IDEA創(chuàng)建第一個Maven項目12.1.4依賴管理12.1.1Maven簡介Maven是一個項目管理和構建工具,將項目開發(fā)和管理過程抽象成一個項目對象模型(POM)。(1)方便的依賴管理。(2)統(tǒng)一的項目結構。(3)標準的項目構建流程。倉庫是Maven工具的一個重要的概念。倉庫用于存儲資源和管理各種jar包。根據(jù)資源、jar包存儲位置可以分為以下三種倉庫。(1)本地倉庫:資源、jar包存儲在本機的倉庫。(2)遠程倉庫(私服):一般由公司團隊搭建的私有倉庫。(3)中央倉庫。中央倉庫是一個公共的、可訪問的Maven倉庫,它包含大量的依賴庫,倉庫地址為“/”。簡介12.1.1Maven簡介(1)下載好Maven工具后進行解壓(2)配置本地倉庫。修改Maven中conf目錄下的settings.xml文件,將文件中的localRepository修改為本機倉庫位置安裝Maven<localRepository>D:\ProgramFiles(x86)\apache-maven-3.8.4\repository</localRepository>(3)配置遠程倉庫(阿里云私服)修改Maven中conf目錄下settings.xml文件的<mirrors>標簽,添加子標簽<mirrors> <mirror> <id>alimaven</id> <mirrorOf>central</mirrorOf> <name>aliyunmaven</name> <url>/nexus/content/groups/public</url> </mirror></mirrors>12.1.1Maven簡介(4)配置環(huán)境變量。在控制面板中,可以通過右擊此電腦選擇“屬性→高級系統(tǒng)設置→環(huán)境變量”來配置環(huán)境變量。圖

12-1

配置環(huán)境變量12.1.1Maven簡介(5)測試安裝結果圖

12-2測試Maven安裝結果打開“命令提示符”窗口,輸入“mvn-v”12.1.2IDEA集成Maven在實際開發(fā)中,一般將Maven整合到IDEA中使用,IDEA集成Maven的具體步驟如下(1)首次打開IDEA工具,進入歡迎頁面(非首次打開,點擊“File→CloseProject”進入歡迎頁面),選中“Customize”,點擊“Allsettings”進入設置界面,如圖12-3所示。圖

12-3

歡迎頁面12.1.2IDEA集成Maven(2)設置Maven安裝目錄、settings.xml文件目錄和本地倉庫目錄圖

12-4配置Maven12.1.2IDEA集成Maven(3)設置JRE圖

12-5設置JRE12.1.2IDEA集成Maven(4)設置JavaCompiler圖

12-6設置JavaCompiler12.1.3使用IDEA創(chuàng)建第一個Maven項目創(chuàng)建Maven項目在歡迎界面,點擊“NewProject”,設置項目名稱、保存路徑、JDK,Language選中“Java”,Buildsystem選中“Maven”,設置坐標信息圖

12-7創(chuàng)建Maven項目Maven坐標主要由以下三部分組成。(1)GroupId:定義當前Maven項目隸屬的組織名稱,通常是公司域名的倒序。(2)ArtifactId:定義當前Maven項目名稱。(3)Version:版本號。版本號也可以創(chuàng)建好項目后進行修改,在pom.xml文件中修改。12.1.3使用IDEA創(chuàng)建第一個Maven項目創(chuàng)建Maven項目,目錄結構如圖12-8所示。圖

12-8創(chuàng)建Maven項目12.1.3使用IDEA創(chuàng)建第一個Maven項目項目坐標<groupId>com.swxy</groupId><artifactId>maven-project01</artifactId><version>1.0-SNAPSHOT</version>12.1.3使用IDEA創(chuàng)建第一個Maven項目導入其他Maven項目在Maven項目中通過會訪問其它的Maven項目,可以通過導入的方式引入其他項目。引入其他Maven項目有以下二種方式。(1)選擇右側Maven面板,點擊“+”號,如圖12-9所示。在彈出窗口中選中對應項目的pom.xml文件,雙擊即可,如圖12-10所示。圖

12-9導入Maven項目圖

12-10選中pom.xml文件12.1.3使用IDEA創(chuàng)建第一個Maven項目(2)選擇“File→ProjectStructure→Modules→點擊‘+’號→ImportModule”,選中待導入項目的pom.xml文件即可圖

12-11選中pom.xml文件12.1.4依賴管理依賴配置依賴是指當前項目運行所需要的jar包。一個項目可以引入多個依賴。例如,Maven項目中引入logback依賴<dependencies>

<dependency>

<groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId>

<version>1.4.14</version>

</dependency>

</dependencies>12.1.4依賴管理添加依賴后,點擊右上角的“l(fā)oad

maven

changes”圖標,引入最新加入的坐標,如圖12-12所示。圖

12-12加載Maven12.1.4依賴管理依賴傳遞依賴具有傳遞性,包括直接依賴和間接依賴。(1)直接依賴:在當前項目中通過依賴配置建立的依賴關系。(2)間接依賴:被依賴的資源如果依賴其他資源,當前項目間接依賴其他資源。排除依賴排除依賴指主動斷開依賴的資源,被排除的資源無需指定版本。

12.1.4依賴管理案例:排除依賴創(chuàng)建項目“maven-project01”和“maven-project02”,項目“maven-project01”引入單元測試依賴和“maven-project02”依賴,觀察依賴關系,接著排除依賴后再觀察依賴關系。(1)創(chuàng)建Maven項目“maven-project02”,在項目中添加單元測試依賴<dependencies>

<dependency>

<groupId>junit</groupId>

<artifactId>junit</artifactId>

<version>4.13.2</version>

</dependency>

</dependencies>12.1.4依賴管理(2)在Maven項目“maven-project01”中引入“maven-project02”依賴,并移除junit依賴<dependencies> ... <dependency> <groupId>com.swxy</groupId> <artifactId>maven-project02</artifactId> <version>1.0-SNAPSHOT</version> <exclusions> <exclusion> <groupId>junit</groupId> <artifactId>junit</artifactId> </exclusion> </exclusions> </dependency></dependencies>12.1.4依賴管理上述代碼中,在添加“<exclusions>”標簽前,項目“maven-project01”間接依賴“junit”,如圖12-13所示。添加“<exclusions>”標簽后,項目不能間接依賴“junit”,如圖12-14所示。圖

12-13未排除junit依賴圖

12-14已排除junit依賴12.1.4依賴管理在項目“maven-project01”的pom.xml文件中,右擊“Diagrams->ShowDiagram...”,如圖12-15所示。項目“maven-project01”(未排除“maven-project02”依賴)的依賴關系如圖12-16所示。圖

12-16依賴關系12.1.4依賴管理依賴范圍默認情況下,Maven項目依賴的jar包可以在任何地方可以使用。也可以通過<scope>標簽設置其作用范圍,作用范圍有以下三種。(1)主程序范圍有效。項目main文件夾內(nèi)有效。(2)測試程序范圍有效。項目test文件夾內(nèi)有效。(3)是否參與打包運行。package指令范圍內(nèi)有效。設置測試程序范圍有<dependency>

<groupId>junit</groupId>

<artifactId>junit</artifactId>

<version>4.13.2</version>

<scope>test</scope></dependency>12.1.4依賴管理表

12-1

依賴包的scope取值及其作用范圍scope取值主程序測試程序是否參與打包compile(默認)是是是test-是-provided是是-runtime-是是12.1.4依賴管理生命周期Maven生命周期是對構建過程的一種抽象,它包括清理、編譯、測試、打包等一系列構建步驟。Maven中有以下三套相互獨立的生命周期。(1)clean:清理工作。包含pre-clean、clean和post-clean三個階段。(2)default:核心工作,例如,編譯、測試、打包、安裝等。(3)site:生成報告、發(fā)布站點等。常用的五個生命周期階段(1)clean:移除上一次構建生成的文件。(2)compile:編譯項目源代碼。(3)test:使用合適的單元測試框架運行測試編譯后的源代碼。(4)package:將編譯后的文件打包,如:jar、war等。(5)install:安裝項目到本地倉庫,以作為本地其他項目中的依賴項。12.1.4依賴管理執(zhí)行指定生命周期的方法:在IDEA工具右側的Maven工具欄,雙擊生命周期對應的階段圖

12-17執(zhí)行生命周期的打包階段12.2SpringBoot入門12.2.1SpringBoot框架12.2.2SpringBoot快速入門12.2.1SpringBoot框架Spring是一個開源的控制反轉(InversionofControl,IoC)和面向切面(AOP)的容器框架。SpringBoot是一個開源的Java框架,旨在簡化Spring應用程序的創(chuàng)建和部署過程,SpringBoot基于Spring開發(fā),不是為了取代Spring,而是為了讓人們更容易的使用Spring。12.2.2SpringBoot快速入門案例:SpringBoot工程的搭建(1)創(chuàng)建SpringBoot工程,并勾選web開發(fā)相關依賴,JDK選中17,Java選中17,如圖12-18所示。點擊“Next”按鈕,進入下一個界面,SpringBoot選中3.1.7,如圖12-19所示。圖

12-18

創(chuàng)建SpringBoot項目圖

12-19

選中SpringBootWeb起步依賴12.2.2SpringBoot快速入門案例:SpringBoot工程的搭建(2)定義HelloController類,添加方法,并添加注解,項目目錄結構和代碼如圖12-20所示。圖

12-20

項目目錄結構12.3SpringBoot應用12.3.1SpringBoot請求參數(shù)12.3.2SpringBoot響應12.3.1SpringBoot請求參數(shù)接收請求參數(shù)可以采用原始方式和SpringBoot方式。原始方式是使用HttpServletRequest對象獲取參數(shù),代碼量較多,使用不方便;SpringBoot方式可以獲取多種類型的請求參數(shù),例如,簡單參數(shù)、實體參數(shù)等,該方式更加簡單和靈活。原始方式@RequestMapping("/simpleParam")

publicStringsimpleParam(HttpServletRequestrequest){

Stringname=request.getParameter("name");Stringage=request.getParameter("age");

return"success";}12.3.1SpringBoot請求參數(shù)SpringBoot方式SpringBoot方式接收的請求參數(shù)分為簡單參數(shù)、實體參數(shù)、數(shù)組參數(shù)、集合參數(shù)、日期參數(shù)、JSON參數(shù)和路徑參數(shù)。

(1)簡單參數(shù)@RequestMapping("/simpleParam")

publicStringsimpleParam(Stringname,Integerage){

System.out.println(name+":"+age);

return"success";

}如果方法形參名稱與請求參數(shù)名稱不匹配,可以使用@RequestParam完成映射@RequestMapping("/simpleParam")

publicStringsimpleParam(@RequestParam(name="name")StringuserName,Integerage){

System.out.println(userName+":"+age);

return"success";

}12.3.1SpringBoot請求參數(shù)

(2)實體參數(shù)@RequestMapping("/simplePojo")publicStringsimplePojo(Useruser){ System.out.println(user); return"success";}簡單實體對象:請求參數(shù)名與形參對象屬性名相同,定義POJO接收即可復雜實體對象:請求參數(shù)名與形參對象屬性名相同,按照對象層次結構關系即可接收嵌套POJO屬性參數(shù),請求參數(shù)名為vince和address.citypublicclassUser{

privateStringname;

privateintage;

privateAddressaddress;}publicclassAddress{

privateStringprovince;

privateStringcity;}12.3.1SpringBoot請求參數(shù)

(3)數(shù)組參數(shù)@RequestMapping("/arrayParam")publicStringarrayParam(String[]hobby){ System.out.println(Arrays.toString(hobby)); return"success";}

(4)集合參數(shù)@RequestMapping("/arrayParam")publicStringarrayParam(@RequestParamList<String>hobby){ System.out.println(hobby); return"success";}

(4)日期參數(shù)@RequestMapping("/dateParam")publicStringdateParam(@DateTimeFormat(pattern="yyyy-MM-ddHH:mm:ss")LocalDateTimecreateTime){ System.out.println(createTime); return"success";}12.3.1SpringBoot請求參數(shù)

(6)JSON參數(shù)@RequestMapping("/jsonParam")publicStringjsonParam(@RequestBodyUseruser){ System.out.println(user); return"success";}JSON數(shù)據(jù)鍵名與形參對象屬性名相同,定義

POJO類型形參即可接收參數(shù),需要使用@RequestBody標識圖

12-21

Postman發(fā)送JSON數(shù)據(jù)12.3.1SpringBoot請求參數(shù)

(7)路徑參數(shù)@RequestMapping("/user/{id}/{name}")publicStringurlParam(@PathVariableintid,@PathVariableStringname){ System.out.println(id+":"+name); return"success";}通過請求URL直接傳遞參數(shù),需要使用@PathVariable獲取路徑參數(shù)12.3.2SpringBoot響應在SpringBoot應用中,通常使用@ResponseBody注解將方法的返回值作為response的body部分,將返回的對象通過適當?shù)霓D換器轉換為指定的格式之后,直接將數(shù)據(jù)寫入到輸出流中。@ResponseBody注解等價于通過response對象輸出指定格式的數(shù)據(jù)。@ResponseBody注解的使用@ResponseBody分為方法注解和類注解,位于Controller方法或類上,是將方法返回值直接響應,如果返回值類型是實體對象或集合,將會轉換為JSON格式響應。通常使用@RestController注解。@RestController包含@Controller和@ResponseBody二個注解??刂茖覥ontroller方法返回類型可以是字符串、對象、集合等,返回類型不統(tǒng)一,不便管理和難以維護??梢越y(tǒng)一響應結果來解決這個問題。所有的控制層方法統(tǒng)一返回Result類型。12.3.2SpringBoot響應publicclassResult{

privateIntegercode;

//響應碼:1成功,0失敗

privateStringmsg;

//提示信息

privateObjectdata;

//返回的數(shù)據(jù)publicstaticResultsuccess(Objectdata){

returnnewResult(1,"success",data);

}publicstaticResultsuccess(){

returnnewResult(1,"success",null);

}

publicstaticResulterror(Stringmsg){

returnnewResult(0,msg,null);

}//省略構造方法、getter/setter等方法}Result實體類12.3.2SpringBoot響應案例:獲取員工數(shù)據(jù),返回統(tǒng)一響應結果。準備emp.xml文件<emps>

<emp> <id>1</id>

<name>Charles</name>

<age>30</age>

<image>images/1.png</image>

<gender>1</gender><!--1:男,0:女

-->

<job>1</job><!--1:專任教師2:輔導員3:其它

-->

</emp>

<emp> <id>2</id><name>Fiona</name><age>38</age>

<image>images/4.png</image>

<gender>0</gender><job>3</job>

</emp></emps>12.3.2SpringBoot響應在pom.xml文件中引入dom4j的依賴,用于解析XML文件<dependency> <groupId>org.dom4j</groupId> <artifactId>dom4j</artifactId> <version>2.1.3</version></dependency>創(chuàng)建用于解析XML的工具類XMLParserUtils、對應的實體類Emp,文件emp.xml放在resources目錄下publicclassXmlParserUtils{publicstatic<T>List<T>parse(Stringfile,Class<T>targetClass){ ArrayList<T>list=newArrayList<T>();//封裝解析出來的數(shù)據(jù) try{ SAXReadersaxReader=newSAXReader();//獲取一個解析器對象 //利用解析器把xml文件加載到內(nèi)存中,并返回一個文檔對象 Documentdocument=saxReader.read(newFile(file)); ElementrootElement=document.getRootElement();//獲取根標簽List<Element>elements=rootElement.elements("emp");//通過根標簽來獲取user標簽12.3.2SpringBoot響應 for(Elementelement:elements){//遍歷集合,得到每一個user標簽 Stringid=element.element("id").getText();//id屬性 Stringname=element.element("name").getText();//name屬性 Stringage=element.element("age").getText();//age屬性 Stringimage=element.element("image").getText();//image屬性 Stringgender=element.element("gender").getText();//gender屬性 Stringjob=element.element("job").getText();//job屬性 Constructor<T>constructor=targetClass.getDeclaredConstructor(Integer.class,String.class,Integer.class,String.class,String.class,String.class);//組裝數(shù)據(jù) constructor.setAccessible(true); Tobject=constructor.newInstance(Integer.parseInt(id),name,Integer.parseInt(age),image,gender,job); list.add(object); } }catch(Exceptione){ e.printStackTrace(); } returnlist;}}12.3.2SpringBoot響應publicclassEmp{ privateIntegerid; privateStringname; privateIntegerage; privateStringimage; privateStringgender; privateStringjob;}Emp.java(4)編寫Controller程序,處理請求,響應數(shù)據(jù)@RestController

publicclassEmpController{

@RequestMapping("/listEmp")

publicResultlist(){

//1、加載emp.xml

Stringfile=this.getClass().getClassLoader().getResource("emp.xml").getFile();

List<Emp>empList=XmlParserUtils.parse(file,Emp.class);

12.3.2SpringBoot響應//2、對員工信息中的性別、職位字段進行處理

empList.stream().forEach(emp->{

Stringgender=emp.getGender();

if("1".equals(gender)){

emp.setGender("男");

}elseif("0".equals(gender)){

emp.setGender("女");

}

Stringjob=emp.getJob();

if("1".equals(job)){

emp.setJob("專任教師");

}elseif("2".equals(job)){

emp.setJob("輔導員");

}elseif("3".equals(job)){

emp.setJob("其它");

}

});

returnResult.success(empList);

//3、組裝數(shù)據(jù)并返回

}

}12.3.2SpringBoot響應<linkrel="stylesheet"href="element-ui/index.css"> <scriptsrc="./js/vue.js"></script> <scriptsrc="./element-ui/index.js"></script> <scriptsrc="./js/axios-0.18.0.js"></script> <body> <h1align="center">員工信息列表展示</h1> <divid="app"> <el-table:data="tableData"style="width:100%"stripeborder><el-table-columnprop="id"label="編號"align="center"min-width="20%"></el-table-column>

//省略姓名、年齡、圖像、性別和職位

</el-table> </div> </body>

(5)使用VSCode創(chuàng)建Vue項目,執(zhí)行打包命令“npmrunbuild”,將生成的dist目錄下的文件拷貝到IDEA工程目錄resources的static目錄下emp.html12.3.2SpringBoot響應 <style> .el-table.warning-row{ background:oldlace; } .el-table.success-row{ background:#f0f9eb; } </style> <script> newVue({ el:"#app", data(){

return{

tableData:[]

} },

12.3.2SpringBoot響應 mounted(){

axios.get('/listEmp').then(res=>{

if(res.data.code){

this.tableData=res.data.data;

}

});

}, methods:{ } }); </script>12.3.2SpringBoot響應圖

12-22

員工信息列表12.4Spring之IoC/DI12.4.1什么是IoC/DI12.4.2分層解耦12.4.1什么是IoC/DI控制反轉(InversionOfControl,簡稱IoC):對象的創(chuàng)建控制權由程序自身轉移到外部(容器),這種思想稱為控制反轉。IoC讓開發(fā)人員不用關注創(chuàng)建對象,把對象的創(chuàng)建、初始化、銷毀等工作交給Spring容器。容器為應用程序提供運行時所依賴的資源,稱之為依賴注入(DependencyInjection,簡稱DI)。依賴注入更加準確地描述了IoC的設計理念,是最流行的IoC實現(xiàn)方式。依賴注入,即組件之間的依賴關系由容器在應用系統(tǒng)運行期來決定,由容器動態(tài)地將目標對象注入到應用系統(tǒng)中的組件之中。Bean對象:IoC容器中創(chuàng)建、管理的對象,稱之為Bean。12.4.1什么是IoC/DI以下二個步驟可以實現(xiàn)三層解耦。(1)Bean的聲明表

12-2注解注解說明位置@Component聲明bean的基礎注解不屬于以下三類時,用此注解@Controller@Component的衍生注解標注在控制器上@Service@Component的衍生注解標注在業(yè)務類上@Repository@Component的衍生注解標注在數(shù)據(jù)訪問類上12.4.1什么是IoC/DI(2)Bean的注入@Autowired注解默認是按照類型進行,該注解是Spring框架提供的注解,@Resource默認是按照名稱注入,該注解是JDK提供的注解。12.4.2分層解耦本章12.3.2節(jié)應用案例,耦合度高而難以拆分,代碼復用性低,數(shù)據(jù)訪問、業(yè)務邏輯和響應請求代碼都放在EmpController類中。

因此需要進行分層解耦,以便于進行分工合作、后期維護和提高軟件組件的重用,便于替換某種產(chǎn)品(例如,變更持久層框架)、產(chǎn)品功能的擴展和適用用戶需求的不斷變化。三層架構的概念控制層(controller):接收前端發(fā)送的請求,對請求進行處理,并響應數(shù)據(jù)。業(yè)務邏輯層(service):處理具體的業(yè)務邏輯。數(shù)據(jù)訪問層(DataAccessObject,簡稱DAO):負責數(shù)據(jù)訪問操作,包括數(shù)據(jù)的增加、刪除、修改、查詢。12.4.2分層解耦三層架構的應用案例:修改Controller程序,

將程序改成三層架構圖

12-23

三層架構的目錄結構12.4.2分層解耦軟件設計的原則:高內(nèi)聚(軟件中各個功能模塊內(nèi)部的功能聯(lián)系)低耦合(衡量軟件中各個層/模塊之間的依賴、關聯(lián)的程序)EmpDaoImpl.java@Repository

publicclassEmpDaoImplimplementsEmpDao{

@Override

publicList<Emp>empList(){

//加載emp.xml,并解析emp.xml中的數(shù)據(jù)

Stringfile=this.getClass().getClassLoader().getResource("emp.xml").getFile();

List<Emp>empList=XmlParserUtils.parse(file,Emp.class);

returnempList;

}

}12.4.2分層解耦EmpServiceImpl.java@ServicepublicclassEmpServiceImplimplementsEmpService{ //按照名稱注入@Resource(name="empDaoImpl") @Autowired//按照類型注入 EmpDaoempDao; @Override publicList<Emp>empList(){ List<Emp>empList=empDao.empList(); empList.stream().forEach(emp->{ Stringsex=emp.getSex(); if(sex.equals("1")){ emp.setSex("男"); }else{ emp.setSex("女"); }

12.4.2分層解耦 Stringjob=emp.getJob(); if("1".equals(job)){ emp.setJob("專任教師"); }elseif("2".equals(job)){ emp.setJob("輔導員"); }elseif("3".equals(job)){ emp.setJob("其它"); } }); returnempList; }}12.4.2分層解耦EmpController.java@Slf4j@RestControllerpublicclassEmpController{ @Autowired EmpServiceempService; @RequestMapping("/listEmp") publicResultlist(){ //1.調(diào)用servlet,獲得數(shù)據(jù) List<Emp>empList=empService.empList(); //2.組裝數(shù)據(jù)并返回 returnResult.success(empList); }}12.5Spring之AOPAOP(AspectOrientedProgramming,面向切面編程)是在運行期間通過底層的動態(tài)代理機制對特定方法植入增強的代碼。主要適用于記錄操作日志、權限控制、事務管理等場景。主要的優(yōu)勢是代碼無侵入、減少重復代碼、提高開發(fā)效率和維護方便。12.5.1入門案例案例:工程部分功能運行速度較慢,需要統(tǒng)計每一個業(yè)務方法來定位耗時較長的業(yè)務方法。(1)在pom.xml中導入AOP的依賴<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-aop</artifactId></dependency>12.5.1入門案例(2)編寫AOP程序(編寫切面類)@Component

@Aspect

@Slf4j

publicclassTimeAspect{

@Around("execution(*co

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論