Spring Boot进阶之Web 2-2 使用AOP处理请求 中

视频地址

https://www.imooc.com/video/14344

package com.imooc.girl.aspect;

import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.stereotype.Component;

//需增加注解@Aspect
// @Component引入spring容器用
@Aspect
@Component
public class HttpAspect {
    //执行com.imooc.girl.controller.GirlController.*(..)下面的所有方法前 输出1111 *的地方可以换成具体的方法名这样只拦截这个方法 
    @Before("execution(public * com.imooc.girl.controller.GirlController.*(..))")
    //@Before("execution(public * com.imooc.girl.controller.GirlController.girlList(..))") 可以是这样的  ..表示任何参数 都会被拦截  com.imooc.girl.controller.GirlController.*(..) 表示任何方法都会被拦截 befor注解会在执行方法前进行拦截
    public void log(){
        System.out.print(1111);
    }

    @After("execution(public * com.imooc.girl.controller.GirlController.*(..))")
    public void doAfter(){
        System.out.print(2222222);
    }
}

如何去掉重复的代码部分

定义一个公用方法
使用注解Pointcut
在Before和After注解后面调用log方法的同时通过@puintcut注解可以吧这个注解后的内容带到@Before和After里


package com.imooc.aspect;

import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;

//需增加注解@Aspect
// @Component引入spring容器用
@Aspect
@Component
public class HttpAspect {

    //定义一个共用的方法
    //使用Pointcut注解
    @Pointcut("execution(public * com.imooc.controller.GirlController.*(..))")
    public void log(){
    }

    //执行com.imooc.girl.controller.GirlController.*(..)下面的所有方法前 输出1111 *的地方可以换成具体的方法名这样只拦截这个方法
    @Before("log()")
    //@Before("execution(public * com.imooc.girl.controller.GirlController.girlList(..))") 可以是这样的  ..表示任何参数 都会被拦截  com.imooc.girl.controller.GirlController.*(..) 表示任何方法都会被拦截 befor注解会在执行方法前进行拦截
    public void doBefore(){
        System.out.print(1111);
    }

    @After("log()")
    public void doAfter(){
        System.out.print(2222222);
    }
}

Log日志的使用

这样控制台打印出来会信息会更全面一些。
包含调用那个类、调用事件等等


package com.imooc.aspect;

import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;

//需增加注解@Aspect
// @Component引入spring容器用
@Aspect
@Component
public class HttpAspect {
private final static Logger logger = LoggerFactory.getLogger(HttpAspect.class);
    //定义一个共用的方法
    //使用Pointcut注解
    @Pointcut("execution(public * com.imooc.controller.GirlController.*(..))")
    public void log(){
    }

    //执行com.imooc.girl.controller.GirlController.*(..)下面的所有方法前 输出1111 *的地方可以换成具体的方法名这样只拦截这个方法
    @Before("log()")
    //@Before("execution(public * com.imooc.girl.controller.GirlController.girlList(..))") 可以是这样的  ..表示任何参数 都会被拦截  com.imooc.girl.controller.GirlController.*(..) 表示任何方法都会被拦截 befor注解会在执行方法前进行拦截
    public void doBefore(){
        logger.info("111111");
    }

    @After("log()")
    public void doAfter(){
        logger.info("22222");
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值