什么是springAOP AOP (Aspect Oriented Programming)意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AoP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。
定义切面切入日志 【spring部分内容|springAOP定义一个切面,切入日志】首先介绍一下aop中execution 表达式
切入点表达式:execution(* 包名..(…))定义日志类接收日志信息
整个表达式可以分为五个部分:
1、execution(): 表达式主体。
2、第一个*号:方法返回类型, 第一个*号表示所有的类型。
3、包名:表示需要拦截的包名。
4、第二个号:表示*类名,号表示所有的类。
5、(…):最后这个*星号表示方法名,号表示所有的方法,后面( )里面表示方法的参数,两个句点表示任何参数
其中除了返回类型模式、方法名模式和参数模式外,其它项都是可选的。
编写一个类,包含{ url;访问源ip;调用方法;传入参数;返回的页面名 }
@Data
@AllArgsConstructor
public class Content { private String url;
private String ip;
private String method;
private Object[] args;
}
定义切面类
@Aspect
@Component
public class LogConfig { private Logger logger= LoggerFactory.getLogger(this.getClass());
/**切入点*/
@Pointcut("execution(* com.ruoyi.auth.controller.*.*(..))")
public void log(){ } @Before("log()")
public void beforeLog(JoinPoint joinPoint){
//传入的是切面对象,即出发这个AOP时被调用的那个方法,以获取所需要的"调用方法"以及"传入参数"
ServletRequestAttributes attributes= (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
HttpServletRequest request = attributes.getRequest();
String url=request.getRequestURL().toString();
String ip=request.getRemoteAddr();
String method=
joinPoint.getSignature().getDeclaringTypeName()
+"."+
joinPoint.getSignature().getClass();
Object[] args=joinPoint.getArgs();
Content content = new Content(url,ip,method,args);
logger.info("Request:{}",content);
} @AfterReturning(returning = "result", pointcut = "log()")
public void logAfterReturning(Object result){
logger.info("Result:{}",result);
}
效果
文章图片
推荐阅读
- nacos|nacos介绍及使用
- 工具类|图片、视频格式校验工具类
- 工具类|初始化配置文件工具类
- idea部分内容|idea2021中Activiti BPMN visualizer简单使用
- 面试|各位学弟学妹,别再看教材了,时间复杂度看这篇就好了
- 第三方整合部分内容|对象存储介绍(腾讯云cos)
- 面试|(自我介绍范文)java面试自我介绍
- 面试|0 基础 Java 自学之路(2021年最新版)
- java|docker启动rabbitmq后无法访问15672端口