首页 > 其他分享 >aop

aop

时间:2024-08-20 11:16:06浏览次数:5  
标签:Log aop annotation org println import public

Log

package com.fh.annotation;

import java.lang.annotation.*;

@Target({ElementType.TYPE, ElementType.METHOD, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface/*注解类*/ Log {
    //模块名称
    String name();
}

Aspect

package com.fh.aop;

import com.fh.annotation.Log;
import lombok.SneakyThrows;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;
import org.aspectj.lang.reflect.MethodSignature;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.*;

import javax.servlet.http.HttpServletRequest;
import java.lang.reflect.Method;
import java.util.Date;

@Component
@Aspect
public class SysAspect {
    //@annotation:当执行的方法上拥有指定的注解时生效
    @Pointcut("@annotation(com.fh.annotation.Log)")
    public void pointcut() {

    }

    @SneakyThrows
    @Around("pointcut()")
    public Object around(ProceedingJoinPoint joinPoint) {
        MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature();
        Method method = methodSignature.getMethod();
        if (method != null) {
            Log logAnnotation = method.getAnnotation(Log.class);
            System.out.println(logAnnotation.name());
        }
        System.out.println("方法名=" + method.getName());

        HttpServletRequest request =
                ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes())
                        .getRequest();
        System.out.println("ip=" + request.getRemoteAddr());
        System.out.println("uri=" + request.getRequestURI());
        System.out.println("请求方式=" + request.getMethod());
        System.out.println("请求时间=" + new Date());
        return joinPoint.proceed();
    }
}

controller

package com.fh.controller;

import com.fh.annotation.Log;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class UserController {

    @Log(name = "根据id获取用户")
    @RequestMapping("/user/{id}")
    public String hello(@PathVariable int id) {
        return "user" + id;
    }

}

测试结果

根据id获取用户
方法名=hello
ip=127.0.0.1
uri=/user/132
请求方式=GET
请求时间=Tue Aug 20 11:09:12 CST 2024

标签:Log,aop,annotation,org,println,import,public
From: https://www.cnblogs.com/goodluckxiaotuanzi/p/18369102

相关文章

  • 手动实现 Spring 底层机制【初始化 IOC容器+依赖注入+BeanPostProcessor 机制+AOP】【
    手动实现Spring底层机制【初始化IOC容器+依赖注入+BeanPostProcessor机制+AOP】【任务1-6整合版】引言:Spring框架的ioc容器、依赖注入、BeanPostProcessor后置处理器、AOP面向切面编程等特点为我们的开发带来了极大的便利,但是我们不能只学其中的api,更要懂得Spring的底......
  • 分享!! 如何自定义权限校验的注解并用AOP拦截实现权限校验
    CustomizepermissionverificationannotationandimplementitwithAOP详细步骤创建自定义注解自定义如下解释一下:@Target(ElementType.METHOD)//指定为method上使用的注解@Retention(RetentionPolicy.RUNTIME)//在运行时保留StringmustRole()default""//注......
  • 什么是AOP,以及在Springboot中自定义AOP
    AOP(AspectOrientedProgramming)一般译为面向切面编程Aspect[ˈæspekt]n.方面;层面;(动词的)体那么AOP面相切面编程具体是指什么,它和之前的OOP面相对象编程又有什么区别和联系。先说OOP,面相对象编程简单来说,万物皆可视为对象,我们要做的就是将万物(业务逻辑中的虚拟物体),抽象为......
  • Java的AOP切面编程之快速入门案例(保姆级教程)
    1.Java中的切面编程(AOP)概述​切面编程(Aspect-OrientedProgramming,AOP)是一种编程范式,旨在将那些贯穿于多个模块的横切关注点(如日志记录、安全检查、事务管理)与核心业务逻辑分离开来。通过AOP,我们可以提高代码的模块化程度,减少代码重复,并使代码更加可维护。概念定义切面(A......
  • 基于Spring AOP与Redisson的令牌桶限流注解实践
    1.什么是限流举个例子......
  • 手动实现 Spring 底层机制【初始化 IOC容器+依赖注入+BeanPostProcessor 机制+AOP】【
    手动实现Spring底层机制【初始化IOC容器+依赖注入+BeanPostProcessor机制+AOP】【任务阶段4】任务阶段1、2、3链接一、实现任务阶段1-编写自己Spring容器,实现扫描包,得到bean的class对象二、实现任务阶段2-扫描将bean信息封装到BeanDefinition对象,并......
  • Thinkphp8 通过中间件 和 属性 简单实现AOP
    转载请著名来源,侵权必究//属性接口declare(strict_types=1);namespaceapp\common\attribute;interfaceAttributeHandler{publicfunctionhandler(mixed$handler);}//不需要登陆属性declare(strict_types=1);namespaceapp\common\attribute;/***跳......
  • 过滤器、拦截器、AOP、ControllerAdvcie执行顺序对比
    过滤器、拦截器、AOP、ControllerAdvcie执行顺序对比0.执行顺序过滤器➡拦截器➡AOP➡ControllerAdvice➡Controller没有异常的情况下,执行顺序如下:有异常的情况下,执行顺序如下:tip:当产生异常后,无论是否有ControllerAdvice处理,HandlerInterceptor都不会执行post......
  • Spring源码系列六:AOP
    更多请关注:https://t.zsxq.com/fhroW文章目录ProxyFactory使用ProxyFactoryAdviceThrowsAdviceMethodInterceptorAdvisor通过spring产生代理对象TargetSourceSpringAop创建流程判断ProxyFactory使用JDK代理还是CGLIB代理拓展ProxyFactoryProxyFactory是Sprin......
  • AOP -面向切面编程
    AOP-面向切面编程aop是oop(面向对象编程)的补充和完善。oop是一种纵向开发,然而当面对需要一些横向的功能如日志,就会导致大量重复的代码。aop利用横切把一些重复的非核心的代码插入到核心代码周围,不需要重复写很多遍。应用场景:日志记录,在方法的执行前后插入日志功能事务处......