zoukankan      html  css  js  c++  java
  • Exception AOP 异常处理

    场景: 常见异常处理, 避免try {}catch(){} 直接处理,  使代码更加清晰

    使用: 

    1.依赖:

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

    2. 避免直接切方法--> 这使用一个exceptionHandlerUtils, 然后切片切utils

    exceptionHandlerUtils:

    @Slf4j
    @Component
    public class ExceptionHandlingUtils {
       
       
        public void throwDAOException(Exception e){
            e.printStackTrace();
            log.error("Failed to operate booking into Mysql, caused by: {}",e.getMessage(),e);
            throw new DAOException(e.getMessage(),e);
        }
        
        public void printEmailException(Exception e,String subject, String to) {
            e.printStackTrace();
            log.error("***EmailException,Failed to send email {} to {}***, caused by: {}",subject,to,e.getMessage());
        }
        
        public void throwJSONConvertException(Exception e) {
            e.printStackTrace();
            log.error("Exception encountered at read json tree, caused by: {}",e.getMessage(),e);
            throw new JSONConvertException(e.getMessage(),e);
        }
    }

    3. AOP 切片:

    ExceptionHandlingAspect
    @Aspect
    @Configuration
    @Slf4j
    public class ExceptionHandlingAspect {
    
        @Value("${mail.common.from}")
        private String from;
        @Value("${mail.common.to}")
        private String to;
        @Autowired
        private MesgHelper mesgHelper;
        
    /**
     * @param joinPoint
     * @param ex  ,获取的异常
     */
        @AfterThrowing(pointcut = "execution(* com.icil.elsa.auo.common.util..*(..))", throwing = "ex")
        public void afterThrowingCommon(JoinPoint joinPoint, Throwable ex){
            log.error("Exception was detected, caused by {}",ex.getMessage());
            if(ex instanceof DAOException){
                commonProcess(ex);
            }
            else if(ex instanceof RestClientException){
                commonProcess(ex);
            }
            else if(ex instanceof ConnectionException){
                commonProcess(ex);
            }
         
        }
       
        
        private void commonProcess(Throwable ex) {
            log.error("Processing exception with name {}",ex.getClass().getSimpleName());
            Object[] paras = {DateUtils.getBeiJingDateLoc()};
            String subject = mesgHelper.getMessage("exception.handling.common.subject", paras, null);
            String exSimpleName = ex.getClass().getSimpleName();
            String body = ex.getMessage();
            Object[] params = { exSimpleName, body};
            String content = mesgHelper.getMessage("exception.handling.common.content", params, null);
            MailUtils.sendMail(to,from,subject,content);
        }
    }

    4.使用: 

    try {
     //doing something 
    }catch(Exception e ){
    exceptionHandlingUtils.throwDAOException(e);
    }  
  • 相关阅读:
    2020年7月3日 查找算法 代码
    QList 和QStringList为空 at()的错误
    网络编程TCP
    02#2位带操作
    04#认识指针
    03#指针内存图//拓展大小端序
    02#循环控制+分支控制+goto标签//拓展3目运算符和逗号运算符
    01#c语言基础内容
    输入的竖线变横
    Keil打包工程
  • 原文地址:https://www.cnblogs.com/lshan/p/11271827.html
Copyright © 2011-2022 走看看