栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

springAOP定义一个切面,切入日志

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

springAOP定义一个切面,切入日志

什么是springAOP

AOP (Aspect Oriented Programming)意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AoP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。

定义切面切入日志

首先介绍一下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);
	}

效果

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/848282.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号