@Aspect使用中出现的一些问题:
因为最近系统需求想记录后台管理员的操作日志,比如点击了什么按钮,做过什么操作,传入了什么参数,返回了什么结果,统统想记录下来,所以需要截取controller层面的每个方法。
所以我第一反应想到的就是面向切面。实现的方式也有很多种,在这里我使用的就是@Aspect注解。
中间出现的问题记录一下。
1.没有切到切面:
@AfterReturning(pointcut="execution(* com.admin.controller..*.*(..)))",
returning="returnValue")
public void afterOp(JoinPoint point, Object returnValue){
try {
xxx;
}
} catch (Exception e) {
logger.error("记录系统管理员操作日志异常:"+e);
}
在配置完之后发现对应的controller层的方法执行完毕之后,并没有跳转到对应的方法中,经过一系列资料查阅后,解决方法如下:
1.有可能execution表达式不正确,要注意包名,类名,方法名,入参的规则等等。
2.注解没有开启<aop:aspectj-autoproxy proxy-target-class="true"/>,(网上看一些博客上说这个需要配置到springmvc的配置文件当中,在spring的配置文件中是没有效果的)
2.方法重复执行:
因为我切的是所有的controller的方法,所以当我去点击查询列表页面的时候进入了两次这个方法,后来去看,是因为controller层中使用了@InitBinder注解,主要是用来对页面数据进行解析绑定的,例如时间格式等。
解决方法:
加上targer的方法判断过滤掉。
因为项目配置和使用的框架不同,可能遇到的问题也不相同,所以仅仅是作为参考
分享到:
相关推荐
它允许你将横切关注点(cross-cutting concerns)如日志、安全性等与业务逻辑分离,减少了代码的重复和耦合。此外,AOP还可以提高代码的清晰度,因为它把相关的代码组织在一起,而不是散布在整个应用中。 在实际...
在Spring AOP中,@Aspect注解用于定义一个切面,它是面向切面编程的核心组件。这篇文章主要探讨了@Aspect的高级用法,包括切点复合运算、切点命名、织入顺序以及如何获取连接点信息。 1. 切点复合运算: 切点...
AOP是一种编程范式,旨在减少代码的重复性,提高代码的可维护性和可读性。它通过将关注点(如日志记录、事务管理、安全性等)分离出来,作为单独的模块进行处理,从而实现代码的解耦。Spring AOP是Spring框架的一个...
AOP通过“切面”这一概念,将关注点分离,使得我们可以集中处理系统中的交叉关注点,如日志、事务管理等,而无需在每个业务方法中重复编写这些通用代码。 **AOP核心概念** 1. **切面(Aspect)**:切面是AOP的核心...
开发者可以利用AOP来减少代码重复,提高代码可维护性和可读性。 在Android开发中,AspectJ的引入可以帮助我们解决一些跨组件的问题,例如,我们可以在不修改业务代码的情况下,统一地添加日志记录或异常处理。这...
在Spring框架中,AOP(面向切面编程)是一种强大的工具,它允许程序员定义横切关注点,如日志、事务管理、权限控制等,并将它们模块化为可重用的组件,避免了传统OOP中的代码重复。本文将详细介绍如何在Spring中使用...
面向切面编程(AOP,Aspect Oriented Programming)是一种编程范式,旨在减少代码的重复性和提高代码的可维护性。在Java世界中,Spring框架是实现AOP的典型代表。本视频教程将深入探讨AOP的核心概念以及如何在Spring...
通过这个简单的日志记录实例,我们可以看到Spring AOP如何优雅地处理横切关注点,避免了代码的重复和侵入性。这只是一个基础的例子,实际上,Spring AOP支持更复杂的场景,如方法参数匹配、注解匹配等,可以满足更多...
总的来说,理解并熟练掌握Spring Boot中的AOP机制,能够帮助开发者更好地组织代码,提高代码的可读性和可维护性,同时减少重复的工作。在实际项目中,根据需求选择合适的通知类型,能够灵活地实现各种跨切面的功能。
AOP的核心概念是“切面”(Aspect),它封装了跨越多个对象的行为或责任。切面可以包含通知(Advice)、切点(Pointcut)和织入(Weaving)。通知定义了在特定时刻执行的代码,切点定义了通知执行的时机,织入则是将...
总结来说,Spring AOP通过自定义注解和切入点表达式提供了一种强大的方式来分离关注点,使得我们可以更专注于业务逻辑,而不是重复的辅助任务。在这个项目中,我们展示了如何创建自定义注解并编写相应的切面,以及...
AOP(Aspect Oriented Programming,面向切面编程)是一种编程范式,旨在提供一种更模块化、更可维护的方式来...通过理解和实践这些知识点,你可以更好地掌握AOP在实际项目中的运用,提高代码质量,并减少重复工作。
在Spring AOP中,我们首先需要定义一个切面(Aspect),它包含通知(Advice),即实际要执行的增强逻辑。通知类型有前置通知(Before)、后置通知(After)、返回后通知(After Returning)、异常后通知(After ...
Spring AOP(Aspect Oriented Programming,面向切面编程)是Spring框架的一个重要模块,它扩展了传统的面向对象编程,允许开发者定义“横切关注点”(cross-cutting concerns),如日志、事务管理、性能监控等。...
在软件开发中,面向切面编程(Aspect-Oriented Programming,简称AOP)是一种编程范式,旨在减少代码的重复性和提高代码的可维护性。AOP允许程序员定义“方面”,这些方面是关注点的模块化,如日志、事务管理或权限...
面向切面编程(Aspect-Oriented Programming,简称AOP)是软件开发中的一个重要概念,它旨在解决程序中的横切关注点,即那些跨越多个模块、类或方法的共同功能,如日志、事务管理、性能监控等。AOP的核心思想是将...
AOP通过“切面”来封装这些横切关注点,使得代码更加模块化,减少重复工作。在Java世界中,Spring框架提供了基于注解的AOP实现,大大简化了AOP的使用。本篇文章将深入探讨如何使用注解实现AOP,以及其背后的原理。 ...
这里 `<aop:config>` 标签定义了 AOP 的配置,`<aop:aspect>` 标签定义了切面,`<aop:before>` 和 `<aop:after-returning>` 分别定义了前置通知和后置通知。 通过上述两种方式,我们都可以实现对 `UserService` 类...
- **日志记录**:通过 AOP,可以在方法执行前后自动记录日志,避免在每个需要日志的地方重复写代码。 - **性能监控**:利用 AOP 记录方法执行时间,分析系统性能瓶颈。 - **权限控制**:在安全方面,AOP 可以...
Spring AOP,全称为Aspect-Oriented Programming(面向切面编程),是Spring框架的重要组成部分,它为Java应用程序提供了强大的横切关注点管理能力。在传统的面向对象编程中,我们往往需要在多个类或方法中重复编写...