精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Spring Boot AOP 掃盲

開發(fā) 架構(gòu)
今天這篇文章就來帶大家通過實(shí)戰(zhàn)的方式,在編程貓 SpringBoot 項(xiàng)目中使用 AOP 技術(shù)為 controller 層添加一個(gè)切面來實(shí)現(xiàn)接口訪問的統(tǒng)一日志記錄。

大家好,我是二哥呀。AOP 是 Spring 體系中非常重要的兩個(gè)概念之一(另外一個(gè)是 IoC),今天這篇文章就來帶大家通過實(shí)戰(zhàn)的方式,在編程貓 SpringBoot 項(xiàng)目中使用 AOP 技術(shù)為 controller 層添加一個(gè)切面來實(shí)現(xiàn)接口訪問的統(tǒng)一日志記錄。

一、關(guān)于 AOP

AOP,也就是 Aspect-oriented Programming,譯為面向切面編程,是計(jì)算機(jī)科學(xué)中的一個(gè)設(shè)計(jì)思想,旨在通過切面技術(shù)為業(yè)務(wù)主體增加額外的通知(Advice),從而對(duì)聲明為“切點(diǎn)”(Pointcut)的代碼塊進(jìn)行統(tǒng)一管理和裝飾。

這種思想非常適用于,將那些與核心業(yè)務(wù)不那么密切關(guān)聯(lián)的功能添加到程序中,就好比我們今天的主題——日志功能,就是一個(gè)典型的案例。

AOP 是對(duì)面向?qū)ο缶幊?Object-oriented Programming,俗稱 OOP)的一種補(bǔ)充,OOP 的核心單元是類(class),而 AOP 的核心單元是切面(Aspect)。利用 AOP 可以對(duì)業(yè)務(wù)邏輯的各個(gè)部分進(jìn)行隔離,從而降低耦合度,提高程序的可重用性,同時(shí)也提高了開發(fā)效率。

我們可以簡(jiǎn)單的把 AOP 理解為貫穿于方法之中,在方法執(zhí)行前、執(zhí)行時(shí)、執(zhí)行后、返回值后、異常后要執(zhí)行的操作。

二、AOP 的相關(guān)術(shù)語

來看下面這幅圖,這是一個(gè) AOP 的模型圖,就是在某些方法執(zhí)行前后執(zhí)行一些通用的操作,并且這些操作不會(huì)影響程序本身的運(yùn)行。

我們了解下 AOP 涉及到的 5 個(gè)關(guān)鍵術(shù)語:

1)橫切關(guān)注點(diǎn),從每個(gè)方法中抽取出來的同一類非核心業(yè)務(wù)

2)切面(Aspect),對(duì)橫切關(guān)注點(diǎn)進(jìn)行封裝的類,每個(gè)關(guān)注點(diǎn)體現(xiàn)為一個(gè)通知方法;通常使用 @Aspect 注解來定義切面。

3)通知(Advice),切面必須要完成的各個(gè)具體工作,比如我們的日志切面需要記錄接口調(diào)用前后的時(shí)長,就需要在調(diào)用接口前后記錄時(shí)間,再取差值。通知的方式有五種:

  • @Before:通知方法會(huì)在目標(biāo)方法調(diào)用之前執(zhí)行
  • @After:通知方法會(huì)在目標(biāo)方法調(diào)用后執(zhí)行
  • @AfterReturning:通知方法會(huì)在目標(biāo)方法返回后執(zhí)行
  • @AfterThrowing:通知方法會(huì)在目標(biāo)方法拋出異常后執(zhí)行
  • @Around:把整個(gè)目標(biāo)方法包裹起來,在被調(diào)用前和調(diào)用之后分別執(zhí)行通知方法

4)連接點(diǎn)(JoinPoint),通知應(yīng)用的時(shí)機(jī),比如接口方法被調(diào)用時(shí)就是日志切面的連接點(diǎn)。

5)切點(diǎn)(Pointcut),通知功能被應(yīng)用的范圍,比如本篇日志切面的應(yīng)用范圍是所有 controller 的接口。通常使用 @Pointcut 注解來定義切點(diǎn)表達(dá)式。

切入點(diǎn)表達(dá)式的語法格式規(guī)范如下所示:

execution(modifiers-pattern? ret-type-pattern declaring-type-pattern?
name-pattern(param-pattern)
throws-pattern?)
  • modifiers-pattern? 為訪問權(quán)限修飾符
  • ret-type-pattern 為返回類型,通常用 *來表示任意返回類型
  • declaring-type-pattern? 為包名
  • name-pattern 為方法名,可以使用 * 來表示所有,或者 set* 來表示所有以 set 開頭的類名
  • param-pattern) 為參數(shù)類型,多個(gè)參數(shù)可以用 , 隔開,各個(gè)參與也可以使用 * 來表示所有類型的參數(shù),還可以使用 (..) 表示零個(gè)或者任意參數(shù)
  • throws-pattern? 為異常類型
  • ? 表示前面的為可選項(xiàng)

舉個(gè)例子:

@Pointcut("execution(public * com.codingmore.controller.*.*(..))")

表示 com.codingmore.controller 包下的所有 public 方法都要應(yīng)用切面的通知。

三、實(shí)操 AOP 記錄接口訪問日志

第一步,在 Spring Boot 項(xiàng)目的 pom.xml 文件中添加 spring-boot-starter-aop 依賴。

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>

第二步,添加日志信息封裝類 WebLog,用于記錄什么樣的操作、操作的人是誰、開始時(shí)間、花費(fèi)的時(shí)間、操作的路徑、操作的方法名、操作主機(jī)的 IP、請(qǐng)求參數(shù)、返回結(jié)果等。

/**
* Controller層的日志封裝類
* Created by macro on 2018/4/26.
*/
public class WebLog {
private String description;
private String username;
private Long startTime;
private Integer spendTime;
private String basePath;
private String uri;
private String url;
private String method;
private String ip;
private Object parameter;
private Object result;
//省略了getter,setter方法
}

第三步,添加統(tǒng)一日志處理切面 WebLogAspect。

/**
* 統(tǒng)一日志處理切面
* Created by 石磊
*/
@Aspect
@Component
@Order(1)
public class WebLogAspect {
private static final Logger LOGGER = LoggerFactory.getLogger(WebLogAspect.class);

@Pointcut("execution(public * com.codingmore.controller.*.*(..))")
public void webLog() {
}

@Before("webLog()")
public void doBefore(JoinPoint joinPoint) throws Throwable {
}

@AfterReturning(value = "webLog()", returning = "ret")
public void doAfterReturning(Object ret) throws Throwable {
}

@Around("webLog()")
public Object doAround(ProceedingJoinPoint joinPoint) throws Throwable {
long startTime = System.currentTimeMillis();
//獲取當(dāng)前請(qǐng)求對(duì)象
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
HttpServletRequest request = attributes.getRequest();
//記錄請(qǐng)求信息(通過Logstash傳入Elasticsearch)
WebLog webLog = new WebLog();
Object result = joinPoint.proceed();
Signature signature = joinPoint.getSignature();
MethodSignature methodSignature = (MethodSignature) signature;
Method method = methodSignature.getMethod();
if (method.isAnnotationPresent(ApiOperation.class)) {
ApiOperation log = method.getAnnotation(ApiOperation.class);
webLog.setDescription(log.value());
}
long endTime = System.currentTimeMillis();
String urlStr = request.getRequestURL().toString();
webLog.setBasePath(StrUtil.removeSuffix(urlStr, URLUtil.url(urlStr).getPath()));
webLog.setIp(request.getRemoteUser());
Map<String,Object> logMap = new HashMap<>();
logMap.put("spendTime",webLog.getSpendTime());
logMap.put("description",webLog.getDescription());
LOGGER.info("{}", JSONUtil.parse(webLog));
return result;
}
}

第四步,運(yùn)行項(xiàng)目,并對(duì) controller 下的某個(gè)控制器進(jìn)行測(cè)試。

Swagger knife4j 訪問地址:http://localhost:9022/doc.html

執(zhí)行登錄用戶查詢操作:

可以在控制臺(tái)可以看到以下日志信息:

源碼地址:https://github.com/itwanger/coding-more

參考鏈接:

作者 cxuan:https://www.cnblogs.com/cxuanBlog/p/13060510.html

灰小猿:https://bbs.huaweicloud.com/blogs/289045

山高我為峰:https://www.cnblogs.com/liaojie970/p/7883687.html

macrozheng:https://github.com/macrozheng/mall

本文轉(zhuǎn)載自微信公眾號(hào)「沉默王二」,可以通過以下二維碼關(guān)注。轉(zhuǎn)載本文請(qǐng)聯(lián)系沉默王二公眾號(hào)。

責(zé)任編輯:武曉燕 來源: 沉默王二
相關(guān)推薦

2021-03-01 23:26:41

日志Spring BootAOP

2022-02-08 17:07:54

Spring BooSpring Aop日志記錄

2022-06-07 07:58:45

SpringSpring AOP

2009-06-19 13:28:30

Spring AOPSpring 2.0

2025-03-12 14:09:56

2009-06-22 10:41:34

Spring.AOP

2022-06-08 08:04:28

Springservicerepository

2009-06-19 11:09:27

Spring AOP

2009-09-29 10:00:40

Spring AOP框

2024-12-24 14:01:10

2023-03-29 08:24:30

2024-11-04 16:29:19

2025-06-18 02:12:00

2022-09-01 10:40:29

SpringAOPJDK

2025-03-17 08:10:00

aviatorSpringJVM

2012-09-28 10:20:14

IBMdw

2024-09-26 14:48:35

SpringAOP范式

2021-05-06 07:58:57

Spring BeanIOCAOP

2022-02-16 13:46:40

Spring Aop代碼注解

2009-06-18 14:54:52

Spring AOP
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

国产精品免费视频观看| 国产乱码精品| 欧美videossexotv100| 日本免费不卡一区二区| 国内三级在线观看| 另类欧美日韩国产在线| 欧美成人自拍视频| 欧美做受高潮6| 亚洲精品福利| 色欧美日韩亚洲| 300部国产真实乱| 国产区视频在线| 国产成人av影院| 国产精品久久久久久久久久 | 欧美日韩第二页| 黄色片网站在线| 26uuu国产在线精品一区二区| 国产欧美一区二区三区久久| 日本三级片在线观看| 日韩情爱电影在线观看| 亚洲精品久久久久久久久久久久| 一级片视频免费观看| www.综合| 亚洲综合免费观看高清在线观看| 日韩精品av一区二区三区| 黑人乱码一区二区三区av| 奇米888四色在线精品| 91极品女神在线| www青青草原| 久久国产小视频| 亚洲人成电影网站色xx| 国产a√精品区二区三区四区| 国产经典一区| 黑人精品xxx一区一二区| 久久综合亚洲精品| 2024最新电影免费在线观看| 日本一区二区三区四区| 国产在线视频欧美一区二区三区| 国产美女精品视频国产| 日本亚洲一区二区| 日本不卡高字幕在线2019| 在线观看精品国产| 激情av一区| 色综合久综合久久综合久鬼88| 欧美福利在线视频| 日韩一区电影| 日韩在线一区二区三区免费视频| a级在线免费观看| 亚洲va久久| 精品亚洲一区二区三区在线观看| 在线黄色免费网站| 欧美巨大xxxx| 精品无人区太爽高潮在线播放| 男人女人拔萝卜视频| 成人精品视频在线观看| 欧美电影在线免费观看| 天堂av.com| 99久久人爽人人添人人澡 | 香蕉久久国产av一区二区| 成人av网站免费观看| 国产高清精品一区二区| 黄色a在线观看| 99久久免费国产| 欧美18视频| 国产大片在线免费观看| 中文子幕无线码一区tr| 手机在线视频你懂的| 国产淫片在线观看| 亚洲国产一区二区三区青草影视 | 日韩成人伦理电影在线观看| 国产成人精品av| 日韩乱码一区二区三区| 麻豆精品久久精品色综合| 国产自产女人91一区在线观看| 91成品人影院| 风间由美性色一区二区三区| 精品一区在线播放| av福利精品| 亚洲免费三区一区二区| 亚洲精品无码国产| 欧美天堂视频| 337p亚洲精品色噜噜噜| 中文 日韩 欧美| 国产成人tv| 亚洲性日韩精品一区二区| 久久噜噜色综合一区二区| 一区二区三区中文| 国产91精品高潮白浆喷水| 中文字幕理论片| 国产成人亚洲综合a∨猫咪| 狠狠色综合一区二区| a√资源在线| 夜夜精品视频一区二区 | 欧美一级鲁丝片| 在线观看日韩国产| 久久黄色一级视频| 国产videos久久| 欧美乱妇40p| 一级黄色大片视频| 国产成人精品免费| 欧美日韩最好看的视频| av毛片在线免费看| 91高清视频在线| 日韩大尺度视频| 国产va免费精品观看精品视频 | 亚洲精品久久7777777| 一二三四在线观看视频| 亚洲激情国产| 成人伊人精品色xxxx视频| 外国精品视频在线观看| 亚洲欧美一区二区三区孕妇| 久久久噜噜噜www成人网| 国产精品一区二区三区av| 国产午夜精品理论片a级探花| 永久久久久久久| 日韩成人一级大片| 久草热久草热线频97精品| 国产精品一卡二卡三卡 | 欧美精品aaaa| 国产精品玖玖玖在线资源| 久久综合电影一区| 中文字字幕在线观看| 91亚洲大成网污www| 国产小视频免费| 精品久久福利| 国产亚洲一区精品| 久草视频一区二区| 99这里只有久久精品视频| 久久久久久久久网| 伊人久久一区| xxxxxxxxx欧美| 亚洲性在线观看| 欧美韩日一区二区三区四区| 男女av免费观看| 日本国产精品| 91av在线视频观看| 天天干在线观看| 亚洲成av人片一区二区| 久久久久亚洲av无码专区首jn| 四虎8848精品成人免费网站| 国产精品一区二区三区久久久| 免费看男男www网站入口在线| 亚洲成人7777| 亚洲色图欧美日韩| 亚洲人www| 国产综合欧美在线看| 波多野结衣在线观看| 精品国产一区久久| 日本一区二区不卡在线| 成人aa视频在线观看| www精品久久| 麻豆精品99| 欧美一级在线播放| 激情小视频在线观看| 日本高清不卡视频| 99精品欧美一区二区| 日本vs亚洲vs韩国一区三区二区| 色综合视频二区偷拍在线| 成人国产网站| 久久精品国产精品亚洲| www.爱爱.com| 亚洲成人在线免费| 国产国语性生话播放| 久久久久久穴| 亚洲精品中字| 国产激情一区| 国语自产精品视频在免费| 五月婷婷在线观看视频| 在线免费观看日韩欧美| 日本不卡一二区| 成人免费毛片a| 99福利在线观看| 日韩精品免费| 91手机在线播放| 极品av在线| 中文字幕9999| 国产成人a人亚洲精品无码| 亚洲福中文字幕伊人影院| 欧美特黄一区二区三区| 久久精品国产77777蜜臀| 国产av熟女一区二区三区| 西瓜成人精品人成网站| 国产精品视频免费观看www| av官网在线播放| 亚洲乱码国产乱码精品精天堂| 最近中文字幕在线观看视频| 一区二区在线观看视频在线观看| 好吊一区二区三区视频| 久久国内精品自在自线400部| 免费cad大片在线观看| 五月国产精品| 成人国产精品一区二区| 性欧美freesex顶级少妇| 最近的2019中文字幕免费一页| 亚洲精品久久久久久无码色欲四季| 狠狠躁夜夜躁人人爽超碰91| 2014亚洲天堂| 2020国产精品| 三上悠亚 电影| 奇米影视一区二区三区| 黄色网在线视频| 欧美精品色图| 国产伦精品一区二区三区视频免费 | 青青青免费视频在线2| 欧美高清dvd| 亚洲毛片一区二区三区| 夜夜操天天操亚洲| 亚洲色图100p| 久久久99精品免费观看| 色诱av手机版| 激情六月婷婷综合| 人人爽人人av| 亚洲黄色成人| 800av在线免费观看| 欧美mv日韩| 欧洲在线视频一区| 久久99精品国产自在现线| 亚洲伊人久久综合| 成人在线视频观看| 青青草一区二区| 天堂中文最新版在线中文| 欧美激情精品久久久久久变态| 一级毛片视频在线| 国产一区二区三区日韩欧美| 涩爱av在线播放一区二区| 亚洲成人1234| 日韩在线观看视频一区二区三区| 9191精品国产综合久久久久久| 91丨九色丨海角社区| 色综合久久88色综合天天免费| 国产成人啪精品午夜在线观看| 一区二区视频免费在线观看| 午夜剧场免费在线观看| 国产精品进线69影院| 日本综合在线观看| 国产欧美日韩亚州综合| 91成人在线免费视频| 久久久久久久久久久久久夜| 3d动漫精品啪啪一区二区下载| av高清久久久| 在线 丝袜 欧美 日韩 制服| 91丨porny丨中文| 搡老熟女老女人一区二区| 91亚洲大成网污www| 国产精品815.cc红桃| 26uuu国产电影一区二区| 亚洲精品国产一区黑色丝袜| 国产日韩欧美综合在线| 香蕉视频久久久| 国产精品久久久久久亚洲毛片| jizz18女人高潮| 国产精品剧情在线亚洲| 日韩av手机在线免费观看| 亚洲欧美另类久久久精品| 欧美日韩三级在线观看 | 91丨九色丨海角社区| 欧美午夜宅男影院| 一卡二卡在线观看| 欧美一区二区在线观看| 性一交一乱一伧老太| 日韩av中文在线| 黄色片在线看| 久久这里有精品| 丰满大乳少妇在线观看网站| 91成人在线视频| 午夜av成人| 亚洲mm色国产网站| 国偷自产av一区二区三区| 麻豆av一区二区三区久久| 成人a'v在线播放| 2022中文字幕| 久久久www| 免费不卡av网站| 91偷拍与自偷拍精品| 日本黄区免费视频观看| 亚洲蜜臀av乱码久久精品| 九九热在线视频播放| 欧美三级午夜理伦三级中视频| 国产熟女一区二区丰满| 精品性高朝久久久久久久| 四虎久久免费| 97视频在线播放| 欧美综合社区国产| 国产区二精品视| 日韩在线综合| 欧美深夜福利视频| 蜜臀精品久久久久久蜜臀 | 精品女人视频| 色涩成人影视在线播放| 亚洲福利电影| 天堂av8在线| 91麻豆国产福利在线观看| 成人做爰视频网站| 一本久久a久久免费精品不卡| 国产麻豆免费观看| 亚洲色图50p| av福利在线导航| 91久久国产婷婷一区二区| 天海翼亚洲一区二区三区| 国产精品12p| 日韩中文字幕麻豆| yjizz视频| 亚洲人成网站精品片在线观看| 99精品在线播放| 精品乱人伦小说| 成人在线观看亚洲| 国产va免费精品高清在线观看| 97久久精品| 伊人久久青草| 日韩精品亚洲专区| 成人性生活免费看| 亚洲一级二级三级| 99久久免费国产精精品| 怡红院精品视频| 正在播放日韩精品| 激情小说网站亚洲综合网| 亚洲国产一成人久久精品| 亚洲少妇久久久| 久久先锋影音av鲁色资源| 日本三级网站在线观看| 欧美另类变人与禽xxxxx| 免费看男男www网站入口在线| 久久久最新网址| 天堂久久av| 中文字幕一区二区中文字幕| 日本在线不卡一区| 国产黄色大片免费看| 色综合久久久久综合体桃花网| 欧美熟女一区二区| 欧美劲爆第一页| 试看120秒一区二区三区| 男插女免费视频| 激情久久五月天| 日本裸体美女视频| 欧美美女网站色| 亚洲麻豆精品| 91精品中文在线| 一区二区三区中文| 中文字幕av一区二区三区人妻少妇 | 精品一区二区三区国产| 99精品久久久| 中文字幕日韩三级片| 日韩欧美在线观看| 麻豆av电影在线观看| 日韩免费av一区二区| 国产精品探花在线观看| 韩国一区二区av| 国产女人aaa级久久久级| 中文在线观看av| 久久精品电影网站| 日韩三级精品| 免费在线观看视频a| 97久久精品人人澡人人爽| 在线观看国产亚洲| 亚洲三级免费看| 久久影视精品| 日本a在线天堂| aa级大片欧美| 日本中文字幕久久| 在线亚洲午夜片av大片| 久久在线观看| 成年人看的毛片| 国产日产欧美一区二区三区| 亚洲一级在线播放| 欧美高清性猛交| 亚洲女娇小黑人粗硬| 中文字幕国产免费| 一区二区三区四区高清精品免费观看| 亚洲经典一区二区三区| 91精品国产色综合| 日韩欧美大片| 在线精品视频播放| 91官网在线观看| av电影免费在线观看| 精品无码久久久久国产| 毛片不卡一区二区| 国产精品1234区| 亚洲视频在线观看网站| 国产精品国产亚洲精品| 妞干网在线视频观看| 日本一区二区成人| 草草视频在线播放| 国产999在线观看| 91成人看片| 3d动漫精品啪啪一区二区下载| 3d成人动漫网站| 欧美成人黑人| www插插插无码免费视频网站| 2017欧美狠狠色| hs视频在线观看| 国产精品久久精品| 亚洲小说欧美另类社区| 国产精品成人在线视频| 亚洲精品在线免费播放| 国精品产品一区| 国产欧美在线一区| 一区二区激情小说| av影片在线看| 久久综合中文色婷婷| 国产精品12区|