一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - SpringBoot開發教程之AOP日志處理

SpringBoot開發教程之AOP日志處理

2022-02-21 13:16xbhog Java教程

現在凡是企業級的或者稍微大點項目,基本都需要日志管理,下面這篇文章主要給大家介紹了關于SpringBoot開發教程之AOP日志處理 的相關資料,需要的朋友可以參考下

日志處理:

需求分析

日志處理需要記錄的是:

  1. 請求的URL
  2. 訪問者IP
  3. 調用的方法
  4. 傳入的參數
  5. 返回的內容

上面的內容要求在控制臺和日志中輸出。

在學習這部分知識的時候,真的感覺收獲很多,在之前Spring學習的aop只是初步了解,現在有了一些深入的理解。好記性不如爛筆頭!

在日志處理這部分主要是aop的使用,通過切面的方式來整合到項目了,從而使得業務邏輯各部分之間的耦合度降低,提高程序的可重用性,同時提高了開發的效率。

人話:Aop 在不改變原有代碼的情況下 , 去增加新的功能

需要了解的:

  • 橫切關注點:跨越應用程序多個模塊的方法或功能。即是,與我們業務邏輯無關的,但是我們需要關注的部分,就是橫切關注點。如日志 , 安全 , 緩存 , 事務等等 ....
  • 切面(ASPECT):橫切關注點 被模塊化 的特殊對象。即,它是一個類。
  • 通知(Advice):切面必須要完成的工作。即,它是類中的一個方法。
  • 切入點(PointCut):切面通知 執行的 “地點”的定義。
  • 連接點(JointPoint):與切入點匹配的執行點。

通知(Advice)里面還有幾種方法來幫助實現,這里我列舉了該部分實現的方法:

  1. doBefore方法(方法前執行),需要注解@Before實現
  2. After方法(方法后執行),需要注解@After實現
  3. doAfterReturning方法,需要注解@AfterReturning實現

具體實現看后面部分。

重要部分:導入依賴

?
1
2
3
4
5
6
7
8
9
10
11
<dependency>
    <groupId>org.aspectj</groupId>
    <artifactId>aspectjweaver</artifactId>
    <version>1.9.4</version>
</dependency>
 
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-aop</artifactId>
    <scope>test</scope>
</dependency>

提醒:導入包以后,刷新下Maven,如果運行的時候找不到包,重啟試試,網上有很多的解決方法(也試過),最后個人只是重啟一下子再刷新下maven就可以使用了。

這里就沒有給出解決方法,只是一個提醒。

實現過程:

創建一個類(LogAspect),將該類定義成一個切面(@Aspect)并且加入容器中(@Component)。

首先創建一個切入點,后面的Advice是建立在切入點上:

?
1
2
@Pointcut("execution(* com.blog.Controller..*.*(..))")
public void log(){}

整個表達式可以分為五個部分

1、execution():表達式主體。

2、第一個*號:表示返回類型,*號表示所有的類型。

3、包名:表示需要攔截的包名,后面的兩個句點分別表示當前包和當前包的所有子包,com.blog.Controller包、子孫包下所有類的方法。

4、第二個*號:表示類名,*號表示所有的類。

5、*(..) :第三個星號表示方法名,*號表示所有的方法,后面括弧里面表示方法的參數,兩個句點表示任何參數

定義完切入點后,處理前置通知和后置通知:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
@Before("log()")
public void doBefore(JoinPoint joinPoint){
    System.out.println("在進入controller之前處理流-------------");
}
@After("log()")
public void doAfter(){
    System.out.println("在進入controller之后處理流-------------");
}
//在切入點return內容之后切入內容(可以用來對處理返回值做一些加工處理)
@AfterReturning(returning = "result",pointcut="log()")
public void doAfterReturning(Object result){
    logger.info("Return ------ {}",result );
}

通過上述的簡單介紹,可以知道我們如果需要知道需求里面的要求,我們的重點應該放到前置通知里面,在流處理之前獲取前端操作的信息。

核心代碼如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
//通過上下文來獲取請求里面的信息
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
 
HttpServletRequest request = attributes.getRequest();
//獲取封裝了署名信息的對象,在該對象中可以獲取到目標方法名,所屬類的Class等信息(反射)
String classMethod = joinPoint.getSignature().getDeclaringTypeName()+","+joinPoint.getSignature().getName();
// 1. 獲取URL
String url = request.getRequestURL().toString();
//2. 獲取ip地址
String addr = request.getRemoteAddr();
 
/*創建一個類RequestData,來保存相關信息*/
RequestData requestData = new RequestData(
    url, addr, classMethod, joinPoint.getArgs()
);
//在控制臺打印出來
logger.info("RequestData------{}",requestData);

創建的類是內部類(RequestData),只是封裝一下需要打印的信息。

實驗效果:

在進入controller之前處理流-------------
2021-08-15 15:19:43.923  INFO 9644 --- [nio-8080-exec-1] com.blog.AspectAop.LogAspect             : RequestData------RequestData{url='http://localhost:8080/', ipAddr='0:0:0:0:0:0:0:1', classMethod='com.blog.Controller.IndexController,index', args=[]}
2021-08-15 15:19:43.932  INFO 9644 --- [nio-8080-exec-1] com.blog.AspectAop.LogAspect             : Return ------ index
在進入controller之后處理流-------------

項目的github地址

參考文獻:

狂神說Spring

表達式參數

總結

到此這篇關于SpringBoot開發教程之AOP日志處理的文章就介紹到這了,更多相關SpringBoot AOP日志處理 內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://www.cnblogs.com/xbhog/p/15208908.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 久久中文字幕乱码免费 | 亚洲欧美日韩天堂在线观看 | 国产资源免费观看 | 国产一线天| 国产日韩欧美不卡www | 女女同性做爰xxoo亲吻 | 亚洲精品欧洲久久婷婷99 | 天堂网在线.www天堂在线视频 | 国产一二在线观看视频网站 | 青草久久精品亚洲综合专区 | 成人男女网免费 | 色啪久久婷婷综合激情 | 日本成熟bbxxxxxxxx | 亚洲国产货青视觉盛宴 | 亚洲国产99在线精品一区69堂 | 国产精品久久久久久久久免费观看 | 福利入口在线观看 | 国模李丽莎大尺度啪啪 | 2015小明台湾永久区域免费 | 亚洲国产综合另类视频 | 4444kk在线看片 | 香蕉精品国产高清自在自线 | 亚洲成综合人影院在院播放 | 把女的下面扒开添视频 | 欧美激情亚洲 | 五月色婷婷网在线观看 | 欧美乱码视频 | 国产成人刺激视频在线观看 | 91混血大战上海双胞胎 | 99在线精品免费视频 | 成人国产精品一级毛片视频 | 色哟哟在线播放 | 调教处男| 国产一区在线免费观看 | 娇妻被健身教练挺进小说阅读 | 91手机看片国产永久免费 | 成人国产在线视频在线观看 | 九九久久国产 | 大伊香蕉在线精品不卡视频 | 嫩草蜜桃 | 国产精品视频第一页 |