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();
    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值