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);
    }  
  • 相关阅读:
    poj3614 Sunscreen 题解报告
    poj2299 Ultra-QuickSort 题解报告
    poj3784 Running Median 题解报告(对顶堆)
    CH103 Cinema 题解报告
    poj1845 Sumdiv 题解报告
    poj2018 Best Cow Fences 题解报告
    $CF311B Cats Transport$ 斜率优化
    斜率优化入门题:任务安排$123$ : )
    $Poj1821 Fence $单调队列优化$DP$
    《算法竞赛》$0×00$基本算法
  • 原文地址:https://www.cnblogs.com/lshan/p/11271827.html
Copyright © 2011-2022 走看看