前置通知(@Before)

Exisi 2022-11-28 08:44:21
Categories: Tags:

 

参数

描述

value

要绑定通知的切入点表达式

argNames

在没有调试信息的情况下编译时,或在运行时解释切入点时,通知声明中使用的任何参数的名称都不可用

示例

@Aspect

@Component

@Slf4j

public class LogAspectHandler {

    /**

     * 在上面定义的切面方法之前执行该方法

     * @param joinPoint jointPoint

     */

    @Before("pointCut()")   // 这里引入了pointCut()方法的切入目标,deoBefore()会在其之前执行

    public void doBefore(JoinPoint joinPoint) {

        log.info("====doBefore方法进入了====");

 

        // 获取签名

        Signature signature = joinPoint.getSignature();

        // 获取切入的包名

        String declaringTypeName = signature.getDeclaringTypeName();

        // 获取即将执行的方法名

        String funcName = signature.getName();

        log.info("即将执行方法为: {},属于{}", funcName, declaringTypeName);

 

        // 也可以用来记录一些信息,比如获取请求的 URL 和 IP

        ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();

        HttpServletRequest request = attributes.getRequest();

        // 获取请求 URL

        String url = request.getRequestURL().toString();

        // 获取请求 IP

        String ip = request.getRemoteAddr();

        log.info("用户请求的url为:{}ip地址为:{}", url, ip);

    }

}