AOP+自定义注解 实现service统一的异常信息处理

返回信息枚举 TipsMsg:

public enum TipsMsg {DEFAULT_SUCCESS("0","操作成功"),DEFAULT_FAILED("1","操作失败"),//其他枚举//get//set}

自定义注解 ReturnMsg (也是切点) :

@Target(ElementType.METHOD)//方法上声明
@Retention(RetentionPolicy.RUNTIME)//注解将被编译器记录在class文件中,而且在运行时会被虚拟机保留,因此它们能通过反射被读取到
public @interface ReturnMsg {TipsMsg successMsg() default TipsMsg.DEFAULT_SUCCESS;TipsMsg failedMsg() default TipsMsg.DEFAULT_FAILED;
}

AOP切面:

@Aspect//声明切面
@Component
public class ReturnMsgAspect {private Logger logger = LoggerFactory.getLogger(ReturnMsgAspect.class);@Pointcut("@annotation(xx.xxx.xx.xx.xx.xx.xx.ReturnMsg)")//切点为注解全路径public void  ReturnMsgPointcut(){}@Around(value = "ReturnMsgPointcut()")public Object serviceAround(ProceedingJoinPoint joinPoint) throws Throwable {//返回值统一MethodSignature signature = (MethodSignature) joinPoint.getSignature();//获取返回值类型Class returnType = signature.getReturnType();//获取注解ReturnMsg returnMsg = signature.getMethod().getAnnotation(ReturnMsg.class);String msg = returnMsg.successMsg().getTipsMsg();String code = returnMsg.successMsg().getCode();Object returnObj = null;try {returnObj = joinPoint.proceed();} catch (Exception e) {e.printStackTrace();throw new ZTBusinessException(BaseRspConstants.RSP_CODE_FAILD, returnMsg.failedMsg().getTipsMsg());}RspBaseBO rspBaseBO = BizEntityApis.buildRspBaseBO(code, msg);if(returnObj instanceof RspBaseBO){//调用成功时,有返回值且为RspBaseBO子类((RspBaseBO) returnObj).setMessage(msg);//默认成功返回值set进去returnObj = returnType.cast(returnObj);}return returnObj;}
}

使用

@ReturnMsg(successMsg = TipsMsg.DEFAULT_SUCCESS,failedMsg = TipsMsg.DEFAULT_FAILED)public RspBaseBO serviceA (Input in) {//业务方法,joinPoint.proceed()所调用的方法
}

execution表表达式也可作为切点,mark下
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/515914.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

跟风 Python 的人,后来都怎样了?

许多人觉得 Python 功能强大、就业范围范围广还上手轻松,得来全部费功夫。 但是一旦推开 Python 的大门你会发现,Python 入门容易但精通很难。看似语法掌握熟练,但一面试或者做项目就会被打回原形。 比如: 1)如何写出高…

Kubernetes 是一个“数据库”吗?

作者 | 张磊,阿里云高级技术专家、CNCF 官方大使,CNCF 应用交付领域 co-chair,Kubernetes 项目资深维护者 最近,Kubernetes 社区里有一个关于“Kubernetes is the new database”的论述,引起了很多人的关注。当然&…

云原生下的开发测试

【以下为分享实录,有删节】 测试环境管理之困与阿里巴巴的解决之道 在云原生时代下,软件的迭代速度越来越快,对测试的要求也越来越高,很多开发者开始使用Kubernetes来管理测试环境。在这个过程中,开发者会遇到很多困…

我是程序员,我用这种方式铭记历史

作者 | kokohuang责编 | 晋兆雨头图 | 付费下载于视觉中国✨抗战直播: 以图文方式“直播”1931年9月18日至1945年9月2日14年间抗战的日日夜夜✨开源地址:https://github.com/kokohuang/WarOfResistanceLive✨预览地址:https://kokohuang.github.io/WarOf…

分布式ELK日志采集系统

文章目录1. 传统日志采集存在哪些优缺点2. Elk采集日志的原理3. 为什么需要将日志存储在ElasticSeach 而不是mysql中呢4. 为什么需要使用elkkafka5. elkkafka原理6. elkkafka 环境的构建7. SpingBoot 整合 kafka Elk1.传统日志采集存在哪些问题2.分布式日志采集有哪些方案3.Ela…

从零入门 Serverless | 架构的演进

作者 | 许晓斌 阿里云高级技术专家 本文整理自《Serverless 技术公开课》第 1 讲,点击开始学习。 关注 “Serverless” 公众号,回复 入门 ,即可获取 Serverless 系列文章 PPT。 传统单体应用架构 十多年前主流的应用架构都是单体应用&…

如何使用 Istio 进行多集群部署管理:多控制平面

作者 | 王夕宁 阿里云高级技术专家 导读:本文摘自于阿里云高级技术专家王夕宁撰写的《Istio 服务网格技术解析与实战》一书,讲述了如何使用 Istio 进行多集群部署管理来阐述服务网格对多云环境、多集群即混合部署的支持能力。 前文详情: …

JDK8新特性入门到精通

文章目录一、 接口中默认方法修饰为普通方法1. 在jdk8之前2. 在JDK 1.8开始3. 案例演练二、Lambda表达式2.1. 什么是Lambda表达式2.2. 为什么要使用Lambda表达式2.3. Lambda表达式的规范2.4. 函数接口定义2.5. Lambda基础语法2.6. 方法引入2.7. Lambda实战案例三、java 8 strea…

一文聊“图”,从图数据库到知识图谱

作者 | 穆琼责编 | 晋兆雨头图 | 付费下载于视觉中国随着知识图谱的发展,图数据库一词被越来越多的提到。那么到底什么是图数据库,为什么要用图数据库,如何去建设一个图数据库应用系统,图数据库与知识图谱到底是什么关系。今天为大…

阿里云机器学习PAI DSW 2.0 Alink商业版重磅发布

DSW 2.0:面向AI研发的集成开发平台 DSW(Data Science Workshop)是阿里巴巴PAI团队根据多年的AI算法和产品研发经验积累,围绕提高AI算法研发效率,降低研发成本而推出的一款适用于各类AI开发者的云端机器学习集成开发环…

DSW:面向AI研发的集成开发平台

发布会传送门 产品详情 云原生技术,注重用户体验,提升研发效率 环境搭建是算法研发过程中的重要一环,这里除了硬件选型外,软件环境的安装配置,后续升级往往会耗费不少时间。DSW借助阿里云ECS,Docker和Ku…

程序员应如何理解高并发中的协程

来源 | 码农的荒岛求生责编 | 晋兆雨头图 | 付费下载于视觉中国作为程序员,想必你多多少少听过协程这个词,这项技术近年来越来越多的出现在程序员的视野当中,尤其高性能高并发领域。当你的同学、同事提到协程时如果你的大脑一片空白&#xff…

5G边缘计算行业通识:阿里云ENS技术演进之路

近日,阿里云杨敬宇在CSDN阿里云核心技术竞争力在线峰会上进行了《5G基础设施-阿里云边缘计算的技术演进之路》主题演讲,针对5G时代下,行业和技术的趋势、边缘计算产业通识以及阿里云边缘计算从过去到未来的技术演进之路进行分享。 5GAI需求推…

精讲23种设计模式-策略模式~聚合短信服务和聚合支付服务

文章目录一、设计模式1. 为什么需要使用设计模式2. 设计模式的分类3. 什么是策略模式4. 为什么叫做策略模式5. 策略模式优缺点6. 策略模式应用场景7. Spring框架中使用的策略模式二、策略模式~聚合短信服务2.1. 依赖引入2.2. 抽象公共行为接口2.3. 具体策略接口实现类2.4. 策略…

引领开源新风潮,阿里巴巴编程之夏第二期重磅来袭!

“唯有热爱,可抵岁月漫长”。 2020 年 5 月 25 日,阿里巴巴编程之夏(Alibaba Summer of Code,以下简称 ASoC )第二期正式上线,项目规模再度升级,来自开源社区的 Apache Dubbo、Apache RocketMQ…

powerdesigner逆向工程(sql转pdm)

第一步: File -> Reverse Engineer -> Database 第二步 : Using Script Files -> Add Files

安谋中国发布“玲珑”i3i5 ISP处理器,剑指何方?

随着图像视频处理技术的发展和 5G 时代的来临,除了社交等平台外,以图像、视频为载体的内容渗透到各领域,特别是智能安防、AIoT、智能汽车等新兴领域应用。与此同时,人们对其清晰度、图像分辨率有新的扩展需求,对摄像头…

凯度信息之美奖揭晓,数据可视化后有多“性感”?

前言:更多关于数智化转型、数据中台内容可扫码加群一起探讨 阿里云数据中台官网 https://dp.alibaba.com/index (作者:常成) 2019年的“凯度信息之美奖”揭晓了,有很多很有意思的信息可视化作品。很多作品看到的时候…

精讲23种设计模式-基于责任链模式~构建企业级风控系统

文章目录一、责任链1. 责任链基本概念2. 定义3. 关键要点4. 责任链模式优缺点5. 责任链模式类结构图6. 网关权限控制责任链模式二、构建企业级风控系统2.1. 定义公共抽象任务2.2. (失信名单)校验处理类2.3. (信用卡)逾期处理类2.4. (蚂蚁信用积分)处理类2.5. 责任链工厂(第一种…