在SpringBoot中配置controller层切面和service层切面的区别

其实区别很简单,贴两端代码一目了然

service层的aop

package com.yy.aop;

//省略导入包

@Aspect
@Service("logAspect")
public class LogAspect {

    @Pointcut("execution(* com.newer.service.*.*(..))")
    public void anyMethod(){
    }

    @Before("anyMethod()")
    public void before(JoinPoint joinPoint){
        String name=joinPoint.getSignature().getName();
        System.out.println(name+"方法的前置通知");
    }

    @AfterReturning("anyMethod()")
    public void afterMethod(){
        System.out.println("后置通知!");
    }

    @AfterThrowing("anyMethod()")
    public void afterThrowing()throws Throwable{
        System.out.println("异常通知");
    }

    @After("anyMethod()")
    public void finalMethod(){
        System.out.println("最终通知");
    }


    @Around("anyMethod()")
    public Object aroundMethod(ProceedingJoinPoint pjp)throws Throwable{
        System.out.println("环绕通知");
        return  pjp.proceed();
    }

}


接下来看controller层的切面

package com.yy.springbootdemo.hospital.controller;


@Aspect
@Component     //每个切面最终还是要扫面到斌容器里面去,成为bin容器的组件
@Order(4)
public class WebLogAspect {
    //获取日志记录器
    private Logger logger=Logger.getLogger(getClass());
    //获取线程副本
    ThreadLocal<Long> startTime=new ThreadLocal<>();

    @Pointcut("execution(public * com.*.*.*.controller.*.*(..))")
    public void weblog(){}

    @Before("weblog()")
    public void doBefore(JoinPoint joinPoint){
        //获取请求报文头部元数据
       ServletRequestAttributes requestAttributes=(ServletRequestAttributes)RequestContextHolder.getRequestAttributes();
       //获取请求对象
       HttpServletRequest request=requestAttributes.getRequest();
       //记录控制器执行前的时间毫秒数
       startTime.set(System.currentTimeMillis());
       logger.info("前置通知执行:");
       logger.info("url:"+request.getRequestURL());
       logger.info("method:"+request.getMethod());
       logger.info("ip:"+request.getRemoteAddr());
       logger.info("class_method:"+joinPoint.getSignature().getDeclaringTypeName()+
               "."+joinPoint.getSignature().getName());
       logger.info("args:"+ Arrays.toString(joinPoint.getArgs()));
    }

    @AfterReturning(returning = "ret",pointcut = "weblog()")
    public void doAfter(Object ret){
        logger.info("后置通知执行:");
        logger.info("RESPONSE:"+ret);
        logger.info("spend:"+(System.currentTimeMillis()-startTime.get()));
    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值