博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
aop +反射处理 service异常
阅读量:3951 次
发布时间:2019-05-24

本文共 2592 字,大约阅读时间需要 8 分钟。

看代码,不解释

package com.example.mongodemo.config;import java.lang.annotation.*;/** * @Author lyr * @create 2020/3/31 11:27 */@Target(ElementType.METHOD)//打到方法上@Retention(RetentionPolicy.RUNTIME)//运行时@Documentedpublic @interface Check {
String value() default "1";//1的话就检查,然后封装异常结果,0的话就不检查,继续往外抛,抛到 controller上处理结果}

定义切面:

package com.example.mongodemo.config;import com.example.mongodemo.code.ResultCode;import com.example.mongodemo.dto.ResultDTO;import com.example.mongodemo.exception.ServiceException;import javafx.scene.control.CheckBox;import lombok.SneakyThrows;import lombok.extern.slf4j.Slf4j;import org.aspectj.lang.ProceedingJoinPoint;import org.aspectj.lang.annotation.Around;import org.aspectj.lang.annotation.Aspect;import org.aspectj.lang.annotation.Pointcut;import org.aspectj.lang.reflect.MethodSignature;import org.springframework.stereotype.Component;import java.lang.reflect.Type;import java.util.Collections;import java.util.List;/** * @Author lyr * @create 2020/3/31 11:32 */@Aspect@Component@Slf4jpublic class ServiceExceptionHandler {
@Pointcut("@annotation(Check)") public void delegate(){
} @SneakyThrows @Around("delegate()") public Object around(ProceedingJoinPoint pjp) {
Object result = null; try{
//System.out.println("方法返回值:: "+getReturnType(pjp)); // if(t instanceof ResultDTO) {
// System.out.println(111); // }else {
// System.out.println(222); // } result = pjp.proceed(); return result; } catch (Throwable throwable) {
Check annotation = ((MethodSignature)pjp.getSignature()).getMethod().getAnnotation(Check.class); if ("1".equals(annotation.value())) {
//如果是1的话就 返回错误信息给前端,并打印日志, 如果是0的话 就直接往外抛异常,给Controller处理,同时打印日志 Type t = getReturnType(pjp); if(t instanceof ResultDTO) {
return getFailResult(); } log.error("出现异常 service: {}",throwable.toString()); return null; }else{
throw new ServiceException(ResultCode.SERVICE_ERROR,throwable); } } } private static Type getReturnType(ProceedingJoinPoint pjp) throws NoSuchMethodException {
return ((MethodSignature)pjp.getSignature()).getMethod().getReturnType(); } private static ResultDTO getFailResult() {
ResultDTO resultDTO = ResultDTO.getFailForPost(); resultDTO.setMessage("服务器运行异常"); return resultDTO; }}

转载地址:http://tauzi.baihongyu.com/

你可能感兴趣的文章
使用ADO操作MDB,关注数据类型
查看>>
使用windows自带Zip命令压缩文件
查看>>
windows获得文件大小
查看>>
Host 'ETCV3' is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts'
查看>>
OCILIB在VS2008中的使用
查看>>
OCILIB VC2008 效率测试
查看>>
PL/SQL设置NUMBER显示为字符串
查看>>
linux ftp 脚本 -- 使用程序执行脚本
查看>>
MFC CListBox的使用
查看>>
VS2008向MFC 对话框 添加托盘图标(显示和消失)
查看>>
redhat中vsftp开机自启动
查看>>
MySQL存储过程,生成大量数据
查看>>
查询字段值出现多次的字段值
查看>>
SQL Server表存在则进行查重 SQL语句
查看>>
redhat 9 下sqlite 3的安装及编程
查看>>
两个同步表的字段复制.Oracle.
查看>>
windows MySQL 报“Got a packet bigger than 'max_allowed_packet' bytes”错误,解决过程.
查看>>
在Redhat9下静态编译glib库.
查看>>
CImg库编译使用.
查看>>
SQL Server循环执行动态SQL语句.
查看>>