-
AOP拦截框架设计7
当前由于业务需求,要求用户在系统里面进行任何操作的时候,都有日志记录。
现在系统都已经基本成型。
请问这个应该如何设计,把代码里面都加入相关日志记录吗,用AOP应该怎么实现?2012年7月31日 13:21
7个答案 按时间排序 按投票排序
-
实际上这个要进行区分,存在两种情况:
1.请求的访问日志
2.方法级别的访问日志
如果是请求日志,通过简单的filter即可实现。或者线下分析access.LOG日志……
如果方法级别的访问日志,可通过动态代理(前提:实现接口)或者字节码工具(cglib、asm等),这个可参考spring aop来解决。
有时候也有数据级别的访问日志(执行了哪些SQL,分别执行了多久等等),这种日志也可通过字节码工具在jdbc的实现中注入统计信息来解决2012年7月31日 15:21
-
可以用spring的AOP来做,springAOP有5种切面:
函数执行前通知,能获得函数输入参数,函数名、函数所属类;
函数执行后通知,能获得返回值,函数名、函数所属类;
抛出异常后通知,能获得异常信息,函数名、函数所属类;
函数执行前后通知(环绕通知),没用过。
这些信息足够记录日志信息。
带一个简单例子,spring配置网上一大把
@Pointcut("execution(* *.*(..))")
public void infoLogMethod() {
}
@Before("infoLogMethod()")
public void beforFunctionExce(JoinPoint jp) {
Logger logger = LoggerFactory.getLogger(jp.getTarget().getClass());
//获取执行函数的输入参数
Object[] objs = jp.getArgs();
//dosomething();
logger.debug(sb.toString());
}2012年8月03日 16:12
-
亲,如果想采用代理模式,必须满足:
1.接口统一;(就像spring为save/updat/delete*方法事务控制一样,接口必须统一)
2.操作描述信息统一;(eg.XX操作了XX 结果XX,可以考虑注解操作信息)
如果这些东西在开始动工之前就考虑到了,那么用代理模式就so easy了!
反之和机械式的在每个方法中添加操作日志的工作量就差不多了~2012年8月01日 17:47
-
这种需求在涉及到资金的系统里面非常常见。简单的自动处理办法是不能满足要求的,也容易出现误记录和重复记录,手动解决的办法是最可靠的。
在数据库里面建好表,定义好操作类型、操作对象、操作者、操作时间等需要的字段,再写一个公用的方法插入全系统日志记录。然后按照功能模块插入日志的代码,没什么技术含量,就是个体力活,但事务要单独处理,因为不管功能模块是否执行成功,日志都要成功插入数据库,这样才有意义。
原始日志数据都进了数据库,就可以考虑开发日志分析的模块了。2012年7月31日 20:30
-
用JDK动态代理吧,你那些操作业务类应该都实现了接口的,没实现接口的话用cglib,代码不用改,不过spring的配置文件得改动
2012年7月31日 15:08
相关推荐
这个“spring AOP拦截方法小示例”是一个实际应用,展示了如何使用Spring AOP来拦截特定层的所有方法,并在调用前后以及出现异常时执行自定义逻辑。 首先,让我们了解AOP的基本概念。AOP的核心是切面(Aspect),它...
动态方法拦截(AOP,Aspect-Oriented Programming)是一种编程范式,旨在通过将关注点分离到称为切面的独立模块来简化程序设计。AOP的核心是拦截,它允许开发者在不修改原有代码的情况下,在方法执行前后插入额外的...
具体到Spring AOP拦截器的代码实现,本文通过创建TestInterceptor类来演示。这个类继承自HandlerInterceptorAdapter,然后重写其中的afterCompletion、postHandle等方法。在这个类中,可以在相应方法中添加自定义的...
通过以上步骤,我们就完成了使用Spring AOP拦截并记录系统操作日志和异常日志的过程。在实际项目中,可以根据需求调整切点表达式,优化日志格式,以及对日志进行分类和分级存储。这样的设计使得日志管理变得灵活且...
本项目名为“轻量级的.NET对象查找服务和AOP开发框架测试源码”,主要关注的是Netop框架,它是一个专为.NET平台设计的IOC(Inversion of Control,控制反转)和AOP容器。让我们深入探讨这些关键概念以及Netop框架...
AOP(Aspect-Oriented Programming,面向切面编程)是一种编程范式,...然而,设计一个全面的AOP框架需要对.NET Framework有深入的理解,并考虑如何优雅地处理切面的顺序、优先级以及与其他编程模型的兼容性等问题。
在Java开发中,AOP(面向切面编程)是一种强大的设计模式,它允许程序员将关注点从业务逻辑中分离出来,比如日志记录、事务管理、性能监控等。本话题聚焦于如何使用Java AOP来在方法执行前后插入日志记录,这有助于...
在Android开发中,AOP(Aspect Oriented Programming,面向切面编程)是一种强大的设计模式,它允许开发者将关注点从核心业务逻辑中分离出来。在本篇内容中,我们将深入探讨Android AOP的概念、实现方式以及它在实际...
在Spring框架中,我们可以利用AOP和代理模式来创建日志拦截器,从而实现对程序执行过程的记录。拦截器会在方法调用前后执行特定操作,例如在方法执行前记录开始时间,在方法执行后记录结束时间和执行结果,以及可能...
学习这个框架,开发者可以深入理解IOC和AOP的概念,掌握如何在C#中实现和使用这两种模式,提升自己的编程技巧和软件设计能力。同时,了解和使用开源框架,也有助于扩展视野,了解业界最佳实践。
Android-Jet-AOP便是一个专为Android平台设计的AOP框架,它借助注解和AspectJ技术,使得在Android应用中实现AOP变得简单易行。 ### 一、面向切面编程(AOP) AOP的核心理念是将程序中的关注点分离,关注点可以理解...
AOP Alliance的核心在于它的简单性,它仅定义了一些基本的接口,如`org.aopalliance.intercept.MethodInterceptor`和`org.aopalliance.intercept.MethodInvocation`,这些接口是大多数AOP框架共有的基础。...
**AOP(面向切面编程)框架教程** AOP,全称为Aspect-Oriented Programming,是一种编程范式,旨在减少代码的重复性,提高代码的模块化...在实际项目中,结合具体需求,灵活运用AOP框架,可以显著提升软件设计的质量。
ByteBuddy的API设计更加直观,对于大部分开发者来说,使用ByteBuddy创建代理和AOP框架会更加便捷。 5. **应用场景**: 利用ByteBuddy和Java Agent构建的AOP框架可以广泛应用于日志记录、性能监控、权限控制、事务...
面向切面编程(AOP,Aspect Oriented Programming)是一种编程范式,旨在通过将关注点分离,使得系统设计更加模块化。AOP的核心思想是将应用程序的横切关注点(如日志、事务管理、安全检查等)从核心业务逻辑中解耦...
拦截器是一种设计模式,常用于框架中,如Spring MVC或Struts2,它允许在业务逻辑执行前后插入自定义的行为。拦截器可以理解为一种过滤机制,它可以在请求到达目标方法之前或之后执行特定的操作,例如日志记录、性能...
AOP Alliance 1.0 的这些接口和概念被广泛应用于各种AOP框架中,使得开发者可以跨框架地复用和组合拦截器,提高了代码的可移植性和可维护性。在实际开发中,比如在Spring框架中,我们可以通过实现这些接口来定义...
【标题】:“基于js的简易AOP框架” 在JavaScript中,面向切面编程(Aspect-Oriented Programming,简称AOP)是一种设计模式,它旨在提高代码的可复用性和可维护性,通过分离关注点来组织代码。AOP允许开发者定义...
通过实现这个接口,开发者可以创建自己的拦截逻辑,并与任何支持AOP Alliance的框架无缝集成。 2. `Advice`: 顾名思义,这个接口代表了一条“建议”,即在程序执行的特定点上应用的增强代码。Advice可以是前置通知...
在Spring框架中,依赖注入(Inversion of Control, IoC)和面向切面编程(Aspect Oriented Programming, AOP)是两大核心特性。本篇将深入探讨如何通过注解方式来模拟Spring的这两种机制,帮助你理解其底层原理。 #...