Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >你不是说你会aop吗?

你不是说你会aop吗?

作者头像
Java旅途
发布于 2020-07-22 09:53:02
发布于 2020-07-22 09:53:02
43000
代码可运行
举报
文章被收录于专栏:Java旅途Java旅途
运行总次数:0
代码可运行

一大早,小王就急匆匆的跑过来找我,说:周哥,那个记录日志的功能我想请教一下。

因为公司某个项目要跟别的平台做对接,我们这边需要给他们提供一套接口。昨天,我就将记录接口日志的工作安排给了小王。

下面是我跟小王的主要对话。

我:说说怎么了?

小王:我将记录接口日志的功能放到了每个controller中,现在感觉有点繁琐,我这样做是不是不太合适?

我:为什么要去每个接口里记录日志?

小王:最开始我是用的拦截器,但是这样一个请求就记录了两条记录。

我:为什么是两条?

小王:在preHandle中记录一条请求数据,在postHandle中记录一条响应数据。

我:。。。你不是说你会Aop吗?

小王:Aop也是一样,在前置通知记录一条请求数据,后置通知记录一条响应数据。

小王:这个数据和以前记录操作日志的不太一样,以前只需要在前置通知记录一条操作日志就可以了,但是现在有响应,所以只能在controller中记录日志了。

我:那你知不知道有个环绕通知?你说一下Aop就几种通知类型。

小王:总共有五种,分别是:

  • 前置通知:在我们执行目标方法之前运行(@Before
  • 后置通知:在我们目标方法运行结束之后,不管有没有异常(@After
  • 返回通知:在我们的目标方法正常返回值后运行(@AfterReturning
  • 异常通知:在我们的目标方法出现异常后运行(@AfterThrowing
  • 环绕通知:目标方法的调用由环绕通知决定,即你可以决定是否调用目标方法,joinPoint.procced()就是执行目标方法的代码 。环绕通知可以控制返回对象(@Around)

接下来,我们一起来演示一下如何使用环绕通知来解决小王的问题。

第一步:提供接口用来接收参数和响应接口

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@RestController
public class TestController {
    @GetMapping("/getName")
    public String getName(HttpServletRequest request) throw Exception {

        String result = "Java旅途";
        String age = request.getParameter("age");
        if("18".equals(age)){
            result = "无法识别";
        }
        return result;
    }
}

第二步:定义切点

execution()是比较常用的定义切点的表达式,execution()语法如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
execution(修饰符  返回值  包..方法名(参数) throws异常)

其中:

修饰符和throws异常可以省略不写

根据这些解释,我们可以将第一步中的接口用execution()表达式来描述一下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
execution(String binzh.website.controller.TestController.GetName(HttpServletRequest))
  • *:匹配所有项
  • ..:匹配任意个方法参数
  • ..出现在类名中时,后面必须跟*,表示包、子孙包下的所有类;

现在我们优化一下上面的表达式,定义切面为controller包及controller下面所有包的所有方法

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
execution(* binzh.website.controller..*.*(..))

第三步:环绕通知记录日志

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Around("execution(* binzh.website.controller..*.*(..))")
public Object around(ProceedingJoinPoint joinPoint) {
    ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
    HttpServletRequest request = attributes.getRequest();
    String age = request.getParameter("age");
    Object proceed = "";
    try {
        proceed = joinPoint.proceed();
    } catch (Throwable e) {
        e.printStackTrace();
    }
    System.out.println("age==="+age);
    System.out.println("proceed ===="+proceed);
    return proceed;
}

运行结果如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
age===19
proceed ====Java旅途

我们之所以可以用环绕通知来处理小王的问题。其中一个重要的原因就是,我们提供的所有接口都是经过统一加密的,最后请求的参数都是一个固定的名字。还需要注意的一点就是,环绕通知的返回值类型必须大于等于方法的返回值,即:加入你方法返回String类型,环绕通知不能写成void类型

小王看到这里后,恍然大悟,准备赶紧回去试一下。我急忙拉住他。

我:如果接口出现异常了怎么办?

小王:那我在异常通知里处理就可以了。

我:你再想一下?

小王:好像不行,异常通知里获取不到请求参数。

我:在环绕通知中捕获处理可以吗?

这时候,看见小王眼睛发光,惊讶的说了一句:环绕通知太牛批了,竟然可以完成前置通知、后置通知和异常通知的工作!

这篇文章戏有点多,别见怪。

实战是提升技术最有效的途径!

< END >

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-07-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Java旅途 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【孟德尔随机化】02文献复现(一)
所以题目中的“single-cell”并非真正意义上的单细胞数据,而是整合了GTEx中49种组织和EyeGEx视网膜组织的e/sQTL数据。
生信菜鸟团
2024/03/18
6430
【孟德尔随机化】02文献复现(一)
【孟德尔随机化】共定位方法汇总
为什么选择这篇文献呢?主要原因是:To identify the effector transcript(s) regulated by CAD loci, we used 4 distinct colocalization approaches.
生信菜鸟团
2023/12/28
2.5K1
【孟德尔随机化】共定位方法汇总
Genome Biology | 基于RNA-seq的孟德尔疾病变异分析
今天给大家介绍的是沙特阿卜杜拉国王科技大学(KAUST)高欣教授课题组(http://sfb.kaust.edu.sa)发表在Genome Biology的一篇文章,“Analysis of transcript-deleterious variants in Mendelian disorders: implications for RNA-based diagnostic“。在全外显子组测序(Whole-exome sequencing, WES) 后,至少有50%的疑似孟德尔疾病患者仍未确诊,而未被WES捕获的非编码变体在多大程度上导致了这个比例还不清楚。全转录组测序(RNA-seq)是一种很有前途的WES的补充,但关于RNA分析对孟德尔疾病诊断的大规模贡献的经验数据很少。在这个研究中,作者对疑似孟德尔疾病的5647个家族进行了研究,描述了关于“转录有害变异(transcript-deleterious variants,TDVs)”的经验,为即将实施的RNA-seq结合基因组测序的临床诊断提供了非常需要的经验数据。
DrugAI
2021/02/01
6370
Genome Biology | 基于RNA-seq的孟德尔疾病变异分析
文献导读(二):循环炎症细胞因子与五种癌症的风险:孟德尔随机分析
作者团队曾进行过一项研究:从北芬兰 1966 年出生队列(NFBC1966)、芬兰年轻人心血管风险研究(YFS)以及 1997 年和 2002 年的 FINRISK 研究的样本中获得了47种炎性因子的GWAS数据。
生信菜鸟团
2023/09/09
2.2K0
文献导读(二):循环炎症细胞因子与五种癌症的风险:孟德尔随机分析
共病遗传的研究方法:关于多发性硬化症和炎症性肠炎遗传共病研究的例子
全文6,358字(不含代码),8 图,阅读 25 分钟。封面图源:pexels.com
黄树嘉
2021/10/18
2.4K0
共病遗传的研究方法:关于多发性硬化症和炎症性肠炎遗传共病研究的例子
bioRxiv | 破译疾病基因功能的单核跨组织分子参考图谱
本文介绍由麻省理工学院和哈佛大学布罗德研究所的Gokcen Eraslan等人发表于bioRxiv的研究成果:本文作者通过在单细胞水平上使用单核RNA-Seq (snRNA-seq) 技术对来自16个供体的25个样本中的每一个应用四种snRNA-seq方法,生成了209,126个核的跨组织图谱,并将它们与新鲜组织的scRNA-seq进行了基准测试。本文作者使用条件式变换自编码机 (cVAE) 来整合跨组织、个体和实验室方法的图谱。通过该图谱本文作者识别罕见的单基因肌肉疾病的基础细胞类型,对于常见复杂疾病识别了可能构成疾病机制的细胞类型和基因模块。本文描述的实验和分析框架将能够对细胞和分子过程如何在个体和群体之间变化展开大规模研究。
DrugAI
2021/08/24
9590
MR文献导读(一):通过孟德尔随机化分析确定多发性硬化症的潜在药物靶点
多发性硬化症是一种复杂的自身免疫性疾病,目前已开发出多种治疗多发性硬化症的疗法,并得到广泛应用。
生信菜鸟团
2023/08/23
7.8K0
MR文献导读(一):通过孟德尔随机化分析确定多发性硬化症的潜在药物靶点
【流行病学大背景下】:孟德尔随机化的现在与未来
GWAS(Genome-wide association studies) 是 20 世纪最后 25 年由假设驱动的候选基因关联研究(CGAS)演变而来的。随着技术的发展,无偏见的全基因组搜索成为可能。随着技术的发展,无偏见的全基因组成为可能。然而,与候选基因关联研究一样,这些研究最初也是为了产生两类有价值的知识:首先,研究人员希望发现疾病起源的潜在分子机制,特别是确定所有相关基因和基因变异(即疾病因果关系)。
生信菜鸟团
2023/10/06
1.6K0
【流行病学大背景下】:孟德尔随机化的现在与未来
孟德尔随机化之研究背景
久违的孟德尔随机化开始更新了,在今天的内容中,我将向大家介绍孟德尔随机化的基本概念及其背景知识,并举例说明何时可以使用该方法以及该方法为何能有效解释因果关系。本系列讲解内容主要基于Stephen Burgess和Simon G. Thompson共同撰写的孟德尔随机化图书。
生信与临床
2020/08/06
1.4K0
孟德尔随机化之研究背景
TwoSampleMR:孟德尔随机化一站式分析
包如其名,TwoSampleMR主要是为两样本孟德尔随机化分析而准备的,在应用这个包以前,我们来看看它的核心函数及其功能:
生信菜鸟团
2023/08/23
6.8K0
TwoSampleMR:孟德尔随机化一站式分析
【孟德尔随机化】如果SMR、Coloc、MR结果不一致该怎么办……
如今的孟德尔随机化日新月异,个人绵薄之力实在是无法及时跟踪最新的进展,有时候也会囿于自己的学识无法带给大家完全可靠的知识。
生信菜鸟团
2023/12/20
2.1K2
【孟德尔随机化】如果SMR、Coloc、MR结果不一致该怎么办……
【孟德尔随机化】GTEx数据和gwas数据可以直接MR吗?
生信菜鸟团
2024/04/18
1K0
【孟德尔随机化】GTEx数据和gwas数据可以直接MR吗?
溃疡性结肠炎患者的细胞内和细胞间重排
当你的才华还撑不起你的野心时,请潜下心来,脚踏实地,跟着我们慢慢进步。不知不觉在单细胞转录组领域做知识分析也快两年了,通过文献速递这个栏目很幸运聚集了一些小伙伴携手共进,一起成长。
生信技能树jimmy
2020/04/27
1.2K0
生信程序 | Nat.Genet | 在疾病关联位点精细定位因果组织和基因
生信菜鸟团
2025/02/06
1890
生信程序 | Nat.Genet | 在疾病关联位点精细定位因果组织和基因
孟德尔随机化理论知识一站式学习
Inferrence the causility between exposures and healthy outcomes using mendelian randomization approaches
用户11414625
2024/12/20
2930
孟德尔随机化理论知识一站式学习
MR-base:高效准确的进行孟德尔随机化研究的网站
通过孟德尔随机化研究,可以基于GWAS的结果来推断不同表型之间的因果关系, 比如使用的很广泛的两样本MR分析
生信修炼手册
2020/05/07
6.1K0
单细胞揭示了结直肠癌微环境中肥大细胞的激活
背景:肥大细胞(MCs)是一种免疫细胞,在机体对过敏原的反应和抵御病原体方面起着至关重要的作用。激活后MC会释放多种介质,包括蛋白酶、细胞因子、组胺和脂质介质,这些介质与各种疾病的发展有关,包括过敏、哮喘、自身免疫性疾病和感染。MCs在结直肠癌(CRC)中的作用仍不清楚,尚未对CRC MCs进行全面的单细胞研究。
生信菜鸟团
2025/02/03
1490
单细胞揭示了结直肠癌微环境中肥大细胞的激活
细胞图谱 | Cell | 人类免疫细胞中的亚洲多样性
◉ 图1. AIDA中的人类多样性 (A) 饼图表示AIDA中的细胞和其他健康血液(不包括脐带血和静脉血)在CZ CELLxGENE普查2023-12-15版本中的主要数据集。圆圈的半径与细胞数量成正比,切片的颜色由自报的种族元数据决定。(B) AIDA捐赠者人口统计(SG:新加坡人)。(C) 研究地点位置。改编自BioRender模板(出版许可KZ26TPRFSH)。(D) 来自AIDA Illumina GSAv3基因型PCA的前三个PC的图;颜色指示捐赠者的自报种族。另见图S1和表S1。◉ ,
生信菜鸟团
2025/05/17
870
细胞图谱 | Cell | 人类免疫细胞中的亚洲多样性
Nucleic Acids Research | 李磊团队构建单细胞遗传调控平台解析疾病位点的细胞特异性机制
全基因组关联分析(Genome-Wide Association Studies,GWAS)已经确定了数千个与复杂性状和疾病相关的遗传位点,然而超过90%的GWAS风险位点位于非编码区域,这为确定疾病相关变异的分子机制带来了极大的挑战。研究表明,非编码区GWAS风险SNP(Single Nucleotide Polymorphisms)可以通过调控其上下游基因表达来影响疾病的进展[1]。因此,研究人员开发了SNP与基因表达变化关联的分析方法,即表达数量性状位点(expression Quantitative Trait Locus,eQTL)将疾病变异与靶基因联系起来。传统eQTL研究通常评估来自整个组织或样本的数百万个细胞的平均表达水平,掩盖了某些细胞类型或处于特定细胞状态的生物调节关系,只有20-50%的常见疾病关联基因被报道与eQTL共定位[2]。这意味着传统的eQTL在理解疾病相关变异方面有很大的局限性。近些年随着单细胞转录组测序技术的迅速发展,使得单细胞水平的eQTL(single-cell eQTL,sc-eQTL)分析成为可能,sc-eQTL可以在更高的分辨率下研究遗传变异对基因表达的调控关系[3,4]。整合大规模多来源的sc-eQTL数据集对于精细识别疾病因果变异和理解潜在的基因调控机制至关重要,然而,目前缺乏系统性研究多种复杂疾病在细胞水平的精细调控机制。
生信宝典
2023/10/13
6750
Nucleic Acids Research | 李磊团队构建单细胞遗传调控平台解析疾病位点的细胞特异性机制
GWAS综述(生信文献阅读俱乐部精选)
从具有遗传标记的复杂性状的统计学关联推进到理解影响性状的功能性遗传变异往往是一个复杂的过程。精细定位可以选择遗传变异并对其进行优先级排序以供进一步研究,但是大量的分析策略和研究设计使得选择最佳方法具有挑战性。作者回顾了不同精细绘图方法的优缺点,强调了影响性能的主要因素。主题包括全基因组关联研究(GWAS)的解释结果,连锁不平衡的作用,统计精细绘图方法,跨种族研究,基因组注释和数据整合以及其他分析和设计问题。
生信技能树
2018/11/30
5.2K0
GWAS综述(生信文献阅读俱乐部精选)
推荐阅读
相关推荐
【孟德尔随机化】02文献复现(一)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验