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);
    }  
  • 相关阅读:
    [常用的SQL语句总结]
    [HTML辅助方法Html.Raw()的简单应用]
    [抹零操作的三种方法]
    如何禁用ViewState,EnableViewState属性设置
    vs2008自定义代码段
    C#.net模拟提交表单GET、POST
    .net 判断对象属性,model对象属性是否赋值,PropertyInfo
    PHP的microtime()? 不!这是 asp.net版的microtime()
    很不错的验证码显示页
    GridView加入自动求和求平均值小计
  • 原文地址:https://www.cnblogs.com/lshan/p/11271827.html
Copyright © 2011-2022 走看看