首先,写一个类,继承aop的MethodInterceptor类。
public class LogIntecepter implements MethodInterceptor {
public final Object invoke(
final MethodInvocation invocation) throws Throwable {
return invokeUnderTrace(
invocation);
}
protected final Object invokeUnderTrace(
final MethodInvocation invocation) throws Throwable {
Object result = null;
KdwDebugLog debugLogger = KdwDebugLog.instanceLog();
String strClassName = "";
try {
strClassName = invocation.getThis().getClass().getName();
if (debugLogger.isInfoEnabled()) {
StringBuilder strLog = new StringBuilder(strClassName);
strLog.append("的");
strLog.append(invocation.getMethod().getName());
strLog.append("() 开始。");
debugLogger.info(strLog.toString());
}
result = invocation.proceed();
if (debugLogger.isInfoEnabled()) {
StringBuilder strLog = new StringBuilder(strClassName);
strLog.append("的");
strLog.append(invocation.getMethod().getName());
strLog.append("() 正常结束。");
debugLogger.info(strLog.toString());
}
} catch (Throwable ex) {
if (debugLogger.isErrorEnabled()) {
StringBuilder strLog = new StringBuilder(strClassName);
strLog.append("的");
strLog.append(invocation.getMethod().getName());
strLog.append("() 异常结束。");
debugLogger.error(strLog.toString());
}
if (ex instanceof CannotCreateTransactionException
|| ex instanceof TransactionSystemException) {
BLogicResult bResult = new BLogicResult();
BLogicMessages messages = new BLogicMessages();
messages.add(Globals.MESSAGE_KEY,
new BLogicMessage(
DBExceptionEnum.EXCEPTION_OTHER.getValue()));
bResult.setErrors(messages);
bResult.setResultString("fatal");
return bResult;
}
throw ex;
}
return result;
}
}
其次,配置spring的aop文件
<bean name="logIntecepter"
scope="prototype"
class="test.LogIntecepter"/>
<aop:config>
<aop:pointcut id="logBeans" expression="bean(*BLogic)"/>
<aop:advisor
pointcut-ref="logBeans"
advice-ref="logIntecepter"/>
</aop:config>
结果:
xxxx类的方法名()开始。
xxxx类的方法名()正常结束。
MethodInvocation相关方法说明:
getArguments() -- 获得目标对象方法的入参
您可能希望更改包含在MethodInvocation类中的信息,以便在使用proceed()调用被截获的方法之前对被截获方法的参数设置新值。
通过对MethodInvocation对象调用getArguments()方法,然后在返回的数组中设置其中的一个参数对象,最初传递给被截获的方法的参数可以被更改。
例子:invocation.getArguments()[0] = new Integer(20);
proceed() -- 执行目标对象方法,并返回目标对象的返回结果
getThis() -- 获取目标对象class
getMethod() -- 获取被执行的目标对象的方法
分享到:
相关推荐
在IT行业中,Spring框架是Java开发中的一个基石,尤其在企业级应用开发中扮演着重要角色。Spring AOP(Aspect ...通过运行这些测试,我们可以看到AOP日志功能的实际效果,并学习如何在自己的项目中应用这些概念。
通过这样的整合,我们可以利用Flex的交互性和Spring的AOP能力,实现高效、灵活的日志管理系统。这种设计不仅适用于记录操作日志,还可以扩展到其他跨切面关注点,如事务管理、权限控制等,从而提高代码的可读性和可...
本项目利用AOP实现切面日志系统,可以在关键操作执行前后自动记录日志,提高代码的可维护性和可扩展性。 在具体实现上,开发者可能创建了一个`@Aspect`注解的切面类,其中包含一个或多个`@Pointcut`定义的切入点...
总结一下,通过上述步骤,我们已经在Spring Boot应用中利用Spring AOP和注解方式实现了数据脱敏。这个拦截器可以在不修改原有业务代码的情况下,确保敏感信息在响应给客户端之前得到处理,提高了应用的安全性。同时...
本项目旨在演示如何在Spring AOP中添加日志功能,以实现对应用程序执行过程的透明跟踪。通过使用Java 1.8,我们可以利用其新特性,如Lambda表达式,来简化代码。 首先,让我们理解Spring AOP的基本概念。AOP是面向...
Spring AOP(面向切面编程)是Spring框架中的一个重要组件,它允许我们在不修改源代码的情况下,对程序的行为进行统一管理和增强...在实际开发中,利用AOP可以有效地提高代码的复用性和模块化程度,降低系统的耦合度。
我们通过反射获取这些信息,并将其记录在日志中。 当然,除了手动编写切面和切入点,Spring还支持基于注解的切点表达式,可以直接在被代理的方法上使用`@Loggable`等自定义注解,然后在切面中解析并处理这些注解,...
Spring MVC AOP日志管理通常与日志框架(如Log4j、Logback或Java内置的java.util.logging)集成。以下以Log4j为例: 1. 引入依赖:在项目pom.xml中添加Log4j的依赖。 2. 配置Log4j:创建log4j.properties或log4j....
在Spring框架中,AOP(面向切面编程)是一种强大的设计模式,它允许开发者将关注点分离,将横切关注点(如日志、事务管理、...在实际项目中,可以利用Spring AOP进行事务管理、性能监控、权限控制等多种功能的实现。
Spring AOP(面向切面编程)是Spring框架中的一个重要组件,它允许我们在不修改源代码的情况下,通过在程序运行时动态地将代码插入到方法调用中,来实现跨切面的关注点,如日志记录、性能监控、事务管理等。而Spring...
**Spring AOP 实现机制详解** Spring AOP(面向切面编程)是Spring框架的核心特性之一,它允许程序员在不修改源代码的...通过深入理解Spring AOP的实现机制,我们可以更好地利用这一强大的工具,优化我们的应用程序。
在Spring Boot应用中,AOP(面向切面编程)是一种强大的工具,用于实现代码的解耦和模块化,尤其适用于处理横切关注点,如日志记录、事务管理、安全控制等。本教程将深入探讨如何利用Spring Boot的AOP特性来实现日志...
在这里,我们重点关注如何利用Spring AOP实现分层日志记录。 **一、Spring AOP基本概念** 1. **切面(Aspect)**: 切面是封装了横切关注点的模块,例如日志记录就是一个横切关注点,它横跨多个对象和类。 2. **通知...
本篇将深入探讨如何利用Spring AOP来实现鉴权和日志记录。 **二、AOP基础知识** 1. **切面(Aspect)**:AOP的核心概念,它封装了关注点,如日志记录或权限验证。一个切面通常包含一个或多个通知(advice)。 2. ...
在Spring AOP(面向切面编程)中实现日志分析管理是一种常见的做法,它能帮助开发者跟踪和理解系统运行过程中的行为,同时提供详细的错误日志以支持运维工作。通过元注解的方式,我们可以轻松地将日志记录功能集成到...
面向切面编程(AOP)是一种编程范式,旨在将横切关注点(如日志、安全等)与业务逻辑分离,从而提高模块化。...利用Java反射机制和Spring AOP框架,开发者可以方便地实现AOP,从而提升代码的模块化和可维护性。
在本示例中,我们将探讨如何利用Spring.NET在三层架构中实现AOP异常日志记录功能。 1. **三层架构**:在软件开发中,三层架构是一种常见的设计模式,包括表示层、业务逻辑层和数据访问层。表示层负责用户交互,业务...
代码实现简单,易于维护:使用 Spring AOP 可以将耗时监测的逻辑与业务逻辑进行解耦,避免业务逻辑代码的冗余和代码维护难度的提高。 2. 安全性高:使用 Spring AOP 进行方法耗时监测,可以在不修改业务逻辑代码的...
在Spring框架中,面向切面编程(Aspect Oriented Programming,简称AOP)是一种强大的设计模式,它允许我们定义横切关注点,如日志、事务管理、权限检查等,然后将这些关注点与核心业务逻辑解耦。这篇教程将详细讲解...
Spring AOP模块提供了实现AOP规范的功能,它允许开发者定义“切面”来封装系统中的横切关注点,如日志、事务管理等。该jar文件包含了Spring AOP的核心类和接口,如`org.springframework.aop.*`包下的`...