SpringBoot使用aop

1確定一個切點

2對這個切點定義一個通知

3,在類上聲明切面

 

1,確定切點

    @Pointcut("execution(public com.lyyh.common.pojo.resp.RespDto<java.util.List<*>> com.lyyh.iotfertilizer.service.impl.*.query*(..))")
    public void queryByPageAspect() {
    }

當然還有別的方式,例如使用註解確定切點

2,對上面這個切點定義一個通知

/**
     * @description 使用環繞通知
     */
    @Around("queryByPageAspect()")
    public RespDto queryByPage(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
        RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes();
        if(requestAttributes != null){
            HttpServletRequest request = ((ServletRequestAttributes) requestAttributes).getRequest();

            String pageNumStr = request.getParameter("pageNum");
            String pageSizeStr = request.getParameter("pageSize");
            if(!StringUtils.isEmpty(pageNumStr) && !StringUtils.isEmpty(pageSizeStr)){
                try{
                    int pageNum = Integer.valueOf(pageNumStr);
                    int pageSize = Integer.valueOf(pageSizeStr);
                    pageNum = pageNum < 1 ? 1:pageNum;
                    pageSize = pageSize < 1 ? 10 : pageSize;
                    PageHelper.startPage(pageNum, pageSize);

                    RespDto respDto = (RespDto) proceedingJoinPoint.proceed();
                    if(respDto.getCode() == RespBuilder.success_code){
                        Page page = (Page)respDto.getData();
                        if(page != null){
                            PageInfo pageInfo = new PageInfo(page.getPageNum(),page.getPageSize(),page.getTotal(),page);
                            respDto.setData(pageInfo);
                        }
                    }
                    return respDto;
                }catch (Exception e){
                    e.printStackTrace();
                    return RespBuilder.error("分頁查詢發生錯誤",null);
                }
            }
        }
        return (RespDto) proceedingJoinPoint.proceed();
    }

3,把這個類聲明爲切面,即註冊到aop,  

在類上添加 @Aspect  @Component兩個註解,

完整代碼如下:

@Aspect
@Component
public class PageAspect {

    @Pointcut("execution(public com.lyyh.common.pojo.resp.RespDto<java.util.List<*>> com.lyyh.iotfertilizer.service.impl.*.query*(..))")
    public void queryByPageAspect() {
    }


    /**
     * @description 使用環繞通知
     */
    @Around("queryByPageAspect()")
    public RespDto queryByPage(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
        RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes();
        if(requestAttributes != null){
            HttpServletRequest request = ((ServletRequestAttributes) requestAttributes).getRequest();

            String pageNumStr = request.getParameter("pageNum");
            String pageSizeStr = request.getParameter("pageSize");
            if(!StringUtils.isEmpty(pageNumStr) && !StringUtils.isEmpty(pageSizeStr)){
                try{
                    int pageNum = Integer.valueOf(pageNumStr);
                    int pageSize = Integer.valueOf(pageSizeStr);
                    pageNum = pageNum < 1 ? 1:pageNum;
                    pageSize = pageSize < 1 ? 10 : pageSize;
                    PageHelper.startPage(pageNum, pageSize);

                    RespDto respDto = (RespDto) proceedingJoinPoint.proceed();
                    if(respDto.getCode() == RespBuilder.success_code){
                        Page page = (Page)respDto.getData();
                        if(page != null){
                            PageInfo pageInfo = new PageInfo(page.getPageNum(),page.getPageSize(),page.getTotal(),page);
                            respDto.setData(pageInfo);
                        }
                    }
                    return respDto;
                }catch (Exception e){
                    e.printStackTrace();
                    return RespBuilder.error("分頁查詢發生錯誤",null);
                }
            }
        }
        return (RespDto) proceedingJoinPoint.proceed();
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章