记录对于Aspect的一些自己的理解和认知。
/** * 日志的AOP实现 * * @author scott.lee * */ @Component @Aspect public class LogAopAchieve { private static final long serialVersionUID = 1L; private static final Logger LOG = Logger.getLogger(LogAopAchieve.class); // 所有在com.yoouce.ycecs下的类 @Before("execution(* com.yoouce.ycecs.*.*(..))") public void doBefore(JoinPoint jp) { LOG.info("log Begining method: " + jp.getTarget().getClass().getName() + "." + jp.getSignature().getName()); } // 方法执行后调用 @After("execution(* com.yoouce.ycecs.*.*(..))") public void doAfter(JoinPoint jp) { LOG.info("log Ending method: " + jp.getTarget().getClass().getName() + "." + jp.getSignature().getName()); } // 方法执行的前后调用 @Around("execution(* com.yoouce.ycecs.*.*(..))") public Object doAround(ProceedingJoinPoint pjp) throws Throwable { long time = System.currentTimeMillis(); Object retVal = pjp.proceed(); time = System.currentTimeMillis() - time; LOG.info("process time: " + time + " ms"); return retVal; } // 方法运行出现异常时调用 @AfterThrowing("execution(* com.yoouce.ycecs.*.*(..))") public void doThrowing(JoinPoint jp, Throwable ex) { LOG.info("method " + jp.getTarget().getClass().getName() + "." + jp.getSignature().getName() + " throw exception"); LOG.info(ex.getMessage()); } }
execution 用于匹配方法执行的连接点;
within 用于匹配指定类型内的方法执行;
this 用于匹配当前 AOP 代理对象类型的执行方法; 注意是AOP代理对象的类型匹配,这样就可能包括引入接口也类型匹配;
target 用于匹配当前目标对象类型的执行方法;注意是目标对象的类型匹配,这样就不包括引入接口也类型匹配;
args 用于匹配当前执行的方法传入的参数为指定类型的执行方法;
@within 用于匹配所以持有指定注解类型内的方法;
@target 用于匹配当前目标对象类型的执行方法,其中目标对象持有指定的注解;
@args 用于匹配当前执行的方法传入的参数持有指定注解的执行;
@annotation 用于匹配当前执行方法持有指定注解的方法;
bean Spring AOP扩展的, AspectJ没有对于指示符,用于匹配特定名称的Bean对象的执行方法;
reference pointcut: 表示引用其他命名切入点,只有@ApectJ风格支持,Schema风格不支持。
配置文件如下
<!--aspect AOP切面配置 --> <aop:config proxy-target-class="true" /> <aop:config> <aop:aspect id="LogAopAchieve" ref="aspectBean"> <!--配置com.spring.service包下所有类或接口的所有方法 --> <aop:pointcut expression="execution(* com.yoouce.ycecs..*.*(..))" id="logPointCut" /> <aop:before method="doBefore" pointcut-ref="logPointCut" /> <aop:after method="doAfter" pointcut-ref="logPointCut" /> <aop:around method="doAround" pointcut-ref="logPointCut" /> <aop:after-throwing method="doThrowing" throwing="ex" pointcut-ref="logPointCut" /> </aop:aspect> </aop:config> <bean id="aspectBean" class="com.yoouce.yclab.aop.LogAopAchieve" />
pointcut基于正则的语法,也支持通配符,含义如下:
* 表示任何数量的字符,除了(.)
.. 表示任何数量的字符包括任何数量的(.)
+ 描述指定类型的任何子类或者子接口
同java一样,提供了一元和二元的条件表达操作符。
一元操作符:!
二元操作符:||和&&
优先权同java
相关推荐
本文档为ASPECT工具插件集V1.3版本的集成测试报告,旨在记录该版本的功能验证、性能评估以及质量控制的过程与结果。此次集成测试由项目经理纪金辉领导,测试团队包括刘文阁、董臣、王昆鹏、刘华军等成员共同完成。...
通过上述分析,我们可以看出`Aspect`与`Advisor`在Spring AOP中的重要作用。`Aspect`是一种更为高级的抽象,它可以包含多个通知和切入点,而`Advisor`则是将一个通知与一个切入点绑定在一起的基本单位。理解这两个...
通过分析和学习AspectDemo,开发者可以更好地掌握如何利用Aspect库来提高代码的可维护性和解耦性,同时减少重复代码。在实际开发中,AOP常用于事务管理、日志记录、性能监控等多个领域,是现代软件工程中不可或缺的...
在这个logging-aspect项目中,AOP可能被用来在特定的方法调用前后自动插入日志记录代码,无需在每个需要记录日志的地方手动编写日志语句。例如,可以定义一个注解`@LogCall`,当这个注解应用于方法时,会在方法执行...
AspectWeaver能够分析源代码,识别出切点(pointcut)并应用对应的切面。它使用了独特的字节码操作技术,可以在不改变原有类结构的情况下,将切面逻辑注入到原始类的字节码中。这种静态织入方式确保了程序在运行时的...
Java收银系统源码分析——聚焦Aspect的只读发布历史记录 在开发企业级应用时,模块化和代码组织是至关重要的。Java收银系统作为一款广泛应用的商业软件,其背后的源码为我们提供了深入理解软件架构和设计模式的宝贵...
在Spring Boot应用中,AOP(面向切面编程)是一种强大的设计模式,它允许程序员定义“切面”,这些切面可以包含业务逻辑的各个方面,如日志、事务管理、...在实际项目中,这样的日志切面对于调试和性能分析非常有用。
AOP允许我们定义“切面”(Aspect),即关注点的模块化,这些关注点是跨越多个对象的公共行为,如事务管理、安全控制和日志记录。在Spring框架中,切面通过定义“通知”(Advice)来实现,通知定义了在特定连接点...
可以通过使用AOP(Aspect-Oriented Programming)技术,来在代码中添加日志记录,而不需要修改原来的代码逻辑。 6. 全链路日志的重要性 全链路日志可以帮助开发者和运维人员快速定位问题,了解系统的性能瓶颈和行为...
基于Spring Boot的舆情分析系统 项目概述 本项目是一个基于Spring Boot的舆情分析系统,集成了爬虫、自然语言处理(NLP)、数据存储和可视化展示等功能。... aspect切面编程,包括日志记录、爬虫监控
#### 实战案例分析 **四、使用AspectJ实现日志记录** 假设我们有一个简单的Web应用程序,希望在每次请求处理前后记录日志信息。传统的做法是在每个控制器方法中手动添加日志代码,这会导致大量的重复代码。使用...
这些功能可能包括日志记录、异常处理、权限控制、事务管理等,它们通常被称为横切关注点,因为它们跨越了多个类和模块。 ### AOP的核心概念 AOP的核心概念主要包括: 1. **切面(Aspect)**:是封装横切关注点的...
结合MySQL数据库,我们可以有效地存储和查询这些审计记录,以满足法规遵从性、安全性和业务分析的需求。在实际开发中,需要注意合理设计切入点和通知,以及优化数据库交互,确保系统的稳定性和高效性。
在Spring框架中,AOP(面向切面...通过定义切面、切入点和通知,我们可以轻松地跟踪和监控应用程序的行为,这对于调试和性能分析非常有用。同时,理解并掌握这些技术,也将有助于提升我们作为IT专业人员的技能水平。
Aspect-Based Opinion Mining是一种更精细化的倾向性分析技术,它专注于特定主题或方面的情感分析,例如对产品特性的正面或负面评价。这要求算法能够准确识别出文本中提及的具体实体及其相关属性,并判断针对这些...
在J2EE应用程序开发中,日志记录是一项至关重要的任务,它可以帮助开发者追踪代码执行过程、定位错误以及分析系统性能。SSH(Struts + Spring + Hibernate)是一个经典的Java Web开发框架,而AOP(面向切面编程)是...
### 面向方面的编程(Aspect-Oriented Programming, AOP)在C#与.NET中的应用 #### 概述 面向方面的编程(AOP)是一种编程范式,它旨在提高程序模块化,通过将横切关注点(cross-cutting concerns)从业务逻辑中...
在IT行业中,SpringMVC和AOP(面向切面编程)是两个非常重要的概念,尤其在企业级Web应用开发中广泛...在实际项目中,这样的日志记录方案能够帮助我们追踪和分析系统的运行状态,对问题排查和性能优化具有重要作用。
当我们调用`addUser`方法时,Spring AOP会自动在调用前后执行`Aspect`类中的`logging`方法,实现系统日志的记录,而无需在`UserDAO`类内部处理日志记录的细节。 织入(Weaving)是指将切面与目标对象结合的过程。在...