<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
要介紹面向切面變成(Aspect-Oriented Programming,AOP),需要先考慮一個這樣的場景:公司有一個人力資源管理系統目前已經上線,但是系統執行不穩定,有時執行的很慢,為了檢測到底是哪個環節出現問題了,開發人員想要監控每一個方法執行的時間,再根據這些執行時間判斷出問題所在。當問題解決後,再把這些監控移除掉。系統目前已經執行,如果手動修改系統成千上萬個方法,工作量太大,而且這些監控方法以後還要移除掉;如果能夠在系統執行過程中動態新增程式碼,就能很好的解決問題。這種在系統執行時動態新增程式碼的方式成為面向切面程式設計(AOP)。Spring Boot 對 AOP 提供了很好的支援。在 AOP 中,有一些常見的概念需要了解:
Spring Boot 在 Spring 的基礎上對 AOP 的設定提供了自動化設定解決方案 spring-boot-starter-aop ,首先引入依賴,如下:
<!-- AOP 依賴 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> </dependency>
然後在com.sang.aop.service 包下建立 UserService 類,如下:
@Service public class UserService { public String getUserById(Integer id){ System.out.println("get..."); return "user"; } public void deleteUserById(Integer id){ System.out.println("delete..."); } }
然後建立切面,如下:
@Component @Aspect public class LogAspect { @Pointcut("execution(* com.sang.aop.service.*.*(..))") public void pc1() { } @Before(value = "pc1()") public void before(JoinPoint jp) { String name = jp.getSignature().getName(); System.out.println(name + "方法開始執行..."); } @After(value = "pc1()") public void after(JoinPoint jp) { String name = jp.getSignature().getName(); System.out.println(name + "方法執行結束..."); } @AfterReturning(value = "pc1()", returning = "result") public void afterReturning(JoinPoint jp, Object result) { String name = jp.getSignature().getName(); System.out.println(name + "方法返回值為:" + result); } @AfterThrowing(value = "pc1()",throwing = "e") public void afterThrowing(JoinPoint jp, Exception e) { String name = jp.getSignature().getName(); System.out.println(name+"方法拋異常了,異常是:"+e.getMessage()); } @Around("pc1()") public Object around(ProceedingJoinPoint pjp) throws Throwable { return pjp.proceed(); } }
程式碼解釋:
設定完成後,接下來在Controller 中建立介面,分別呼叫 Userservice 中的兩個方法,即可看到 LogAspect 中的程式碼動態的嵌入目標方法中執行了,如下:
getUserById方法開始執行...
get...
getUserById方法返回值為:user
getUserById方法執行結束...
deleteUserById方法開始執行...
delete...
deleteUserById方法返回值為:null
deleteUserById方法執行結束...
Spring Boot 專案在啟動後,首先會去靜態資源路徑下查詢 index.html 作為首頁檔案,若查詢不到,則會去查詢動態的 index.html 作為首頁檔案。
例如,如果想使用靜態的 index.html 頁面作為專案的首頁,只需在 resources/static 目錄下建立 index.html 檔案疾苦。若想使用動態頁面作為專案首頁,則需在 resources/templages 目錄下建立 index.html (使用Thymeleaf 模板) 或者 index.ftl(使用 FreeMarker 模板),然後在 Controller 中返回邏輯檢視名,如下:
@Controller public class IndexController { @RequestMapping("/index") public String index(){ return "index"; } }
執行專案,輸入"http://localhost:8081",檢視結果
favicon.ico 是瀏覽器索引標籤左上角的圖示,可以放在靜態資源路徑下或者類路徑下,靜態資源路徑下的 favicon.ico 優先順序高於類路徑下的 favicon.ico
可以使用線上轉換網站:https://www.bitbug.net/ 將一張普通圖片轉為 .ico 圖片,轉換成功後,將檔案重新命名為 favicon.ico ,然後複製到 resources/static 目錄下,如圖
啟動專案,檢視效果
注意:清快取,然後 Ctrl+F5 強制重新整理
Spring Boot 中提供了大量的自動化設定類,在 Spring Boot 的入口類上有一個 @SpringBootApplication 註解。該註解是一個組合註解,由 @SpringBootConfiguration、@EnableAutoConfiguration、@ComponentScan 組成,其中 @EnableAutoConfiguration 註解開啟自動化設定,相關的自動化設定就會被使用。如果開發者不想使用某個自動化設定,按如下方式除去相關設定即可:
@SpringBootApplication @EnableAutoConfiguration(exclude = {ErrorMvcAutoConfiguration.class}) public class Chapter04Application { public static void main(String[] args) { SpringApplication.run(Chapter04Application.class, args); } }
在 @EnableAutoConfiguration 註解中使用 exclude 屬性去除 Error 的自動化設定類,這時如果在 resources/static/error 目錄下建立 4xx.htnl、5xx.html ,存取出錯時就不會自動跳轉了。由於 @EnableAutoConfiguration 註解的 exclude 屬性值是一個陣列,因此有多個要排除的自動化組態檔只需要繼續新增即可。除了這種設定方式外,也可在 application.properties 中設定,如下:
spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.web.servlet.error.ErrorMvcAutoConfiguration
新增前
新增後
到此這篇關於SpringBoot整合Web之AOP設定詳解的文章就介紹到這了,更多相關SpringBoot AOP設定內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45