`
oncekey
  • 浏览: 12247 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

Aspect 分析记录

    博客分类:
  • AOP
 
阅读更多

记录对于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版本集成测试报告.docx

    本文档为ASPECT工具插件集V1.3版本的集成测试报告,旨在记录该版本的功能验证、性能评估以及质量控制的过程与结果。此次集成测试由项目经理纪金辉领导,测试团队包括刘文阁、董臣、王昆鹏、刘华军等成员共同完成。...

    SPRING:aspect和advisor区别

    通过上述分析,我们可以看出`Aspect`与`Advisor`在Spring AOP中的重要作用。`Aspect`是一种更为高级的抽象,它可以包含多个通知和切入点,而`Advisor`则是将一个通知与一个切入点绑定在一起的基本单位。理解这两个...

    AspectDemo

    通过分析和学习AspectDemo,开发者可以更好地掌握如何利用Aspect库来提高代码的可维护性和解耦性,同时减少重复代码。在实际开发中,AOP常用于事务管理、日志记录、性能监控等多个领域,是现代软件工程中不可或缺的...

    Android-logging-aspect项目中日志收集实现AOP和Listener两种全局实现

    在这个logging-aspect项目中,AOP可能被用来在特定的方法调用前后自动插入日志记录代码,无需在每个需要记录日志的地方手动编写日志语句。例如,可以定义一个注解`@LogCall`,当这个注解应用于方法时,会在方法执行...

    aspectjrt1.7和aspectweaver1.

    AspectWeaver能够分析源代码,识别出切点(pointcut)并应用对应的切面。它使用了独特的字节码操作技术,可以在不改变原有类结构的情况下,将切面逻辑注入到原始类的字节码中。这种静态织入方式确保了程序在运行时的...

    java收银系统源码-Aspect:Aspect的只读发布历史记录

    Java收银系统源码分析——聚焦Aspect的只读发布历史记录 在开发企业级应用时,模块化和代码组织是至关重要的。Java收银系统作为一款广泛应用的商业软件,其背后的源码为我们提供了深入理解软件架构和设计模式的宝贵...

    springboot-aop-aspect:Springboot使用Aspect实现一个切面,以记录日志为例

    在Spring Boot应用中,AOP(面向切面编程)是一种强大的设计模式,它允许程序员定义“切面”,这些切面可以包含业务逻辑的各个方面,如日志、事务管理、...在实际项目中,这样的日志切面对于调试和性能分析非常有用。

    spring aop实现日志分析管理

    AOP允许我们定义“切面”(Aspect),即关注点的模块化,这些关注点是跨越多个对象的公共行为,如事务管理、安全控制和日志记录。在Spring框架中,切面通过定义“通知”(Advice)来实现,通知定义了在特定连接点...

    基于APM的容器全链路日志分析.pdf

    可以通过使用AOP(Aspect-Oriented Programming)技术,来在代码中添加日志记录,而不需要修改原来的代码逻辑。 6. 全链路日志的重要性 全链路日志可以帮助开发者和运维人员快速定位问题,了解系统的性能瓶颈和行为...

    基于Spring Boot的舆情分析系统.zip

    基于Spring Boot的舆情分析系统 项目概述 本项目是一个基于Spring Boot的舆情分析系统,集成了爬虫、自然语言处理(NLP)、数据存储和可视化展示等功能。... aspect切面编程,包括日志记录、爬虫监控

    AOP - Mastering AspectJ Aspect-Oriented Programming in Java(John Wiley and Sons).pdf

    #### 实战案例分析 **四、使用AspectJ实现日志记录** 假设我们有一个简单的Web应用程序,希望在每次请求处理前后记录日志信息。传统的做法是在每个控制器方法中手动添加日志代码,这会导致大量的重复代码。使用...

    Aspect-Oriented Programming in JAVA

    这些功能可能包括日志记录、异常处理、权限控制、事务管理等,它们通常被称为横切关注点,因为它们跨越了多个类和模块。 ### AOP的核心概念 AOP的核心概念主要包括: 1. **切面(Aspect)**:是封装横切关注点的...

    spring的aop方式,审计记录用户操作步骤服务,mysql数据库

    结合MySQL数据库,我们可以有效地存储和查询这些审计记录,以满足法规遵从性、安全性和业务分析的需求。在实际开发中,需要注意合理设计切入点和通知,以及优化数据库交互,确保系统的稳定性和高效性。

    利用 spring annotation AOP 反射 记录日志

    在Spring框架中,AOP(面向切面...通过定义切面、切入点和通知,我们可以轻松地跟踪和监控应用程序的行为,这对于调试和性能分析非常有用。同时,理解并掌握这些技术,也将有助于提升我们作为IT专业人员的技能水平。

    第三届中文倾向性分析评测论文集

    Aspect-Based Opinion Mining是一种更精细化的倾向性分析技术,它专注于特定主题或方面的情感分析,例如对产品特性的正面或负面评价。这要求算法能够准确识别出文本中提及的具体实体及其相关属性,并判断针对这些...

    j2ee的aop方式记录日志

    在J2EE应用程序开发中,日志记录是一项至关重要的任务,它可以帮助开发者追踪代码执行过程、定位错误以及分析系统性能。SSH(Struts + Spring + Hibernate)是一个经典的Java Web开发框架,而AOP(面向切面编程)是...

    Aspect-Oriented Programming with C# and .NET

    ### 面向方面的编程(Aspect-Oriented Programming, AOP)在C#与.NET中的应用 #### 概述 面向方面的编程(AOP)是一种编程范式,它旨在提高程序模块化,通过将横切关注点(cross-cutting concerns)从业务逻辑中...

    SpringMVC 写操作日志

    在IT行业中,SpringMVC和AOP(面向切面编程)是两个非常重要的概念,尤其在企业级Web应用开发中广泛...在实际项目中,这样的日志记录方案能够帮助我们追踪和分析系统的运行状态,对问题排查和性能优化具有重要作用。

    Spring_AOP入门与分析

    当我们调用`addUser`方法时,Spring AOP会自动在调用前后执行`Aspect`类中的`logging`方法,实现系统日志的记录,而无需在`UserDAO`类内部处理日志记录的细节。 织入(Weaving)是指将切面与目标对象结合的过程。在...

Global site tag (gtag.js) - Google Analytics