java - 使用 Spring AOP 记录是个好主意吗?

标签 java spring logging aop spring-aop

我目前正在阅读 Spring,其中一个用于使用 AOP 的示例是记录方法调用的开始和结束。

我还了解到使用 AOP 会影响性能。

对于这种类型的日志记录,使用 Spring AOP 是个好主意吗?我的理解是 Spring 使用 Dynamic AOP 是否会更好地为这种类型的 AOP 使用 Static AOP(如 AspectJ)。

目前我工作的公司的编码政策需要大量的日志记录,我想减少我必须编写的日志记录代码的数量并提高我的代码的可读性。

我是不是找错树了?

最佳答案

我使用 Spring AOP 来实现日志记录,所以我分享一下我的观察:

  • 性能影响不够,小于日志本身的影响
  • 在 Spring 配置中配置了方面,如果需要,您可以完全禁用日志记录代码
  • 随着堆栈跟踪变得越来越长,调试变得更加困难
  • 这样的决定足以影响设计。不仅你得到一堆接口(interface)和方面类,而且你的生产类必须非常“瘦”。不要忘记,您无法拦截对非公共(public)方法的调用。自调用(甚至是公共(public)方法)也无法被拦截(因为您使用裸 this 句柄而不是由 AOP 包装的句柄),因此无法记录。因此,所有日志记录只能发生在接口(interface)边界上。 (这涉及到使用基于代理的切面编织,有一个使用 cglib 进行运行时子类化的选项,但我没有使用它)
  • 编写切入点可能非常棘手。 IntelliJ Idea 极大地帮助确定切入点建议哪些方法。
  • 总的来说,我喜欢这种方法并认为它值得使用,但它看起来比我预期的要复杂得多

关于java - 使用 Spring AOP 记录是个好主意吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2071050/

相关文章:

Java xtend 有趣的编译错误 : This expression is not allowed in this context, 因为它不会引起任何副作用

java - 打造类似 Spotify 的外观

java - spring中bean类的无效属性 'datasource'

java - REST:@autowired heavenService 上的 java.lang.NullPointerException

node.js - 在新的不同文件中用 log4js 写日志?

java - 模式 Java - 正则表达式

java - Spring 启动 : How can I add tomcat connectors to bind to controller

c# - 为 C# 库定义 TraceSource 日志记录配置

Java - 为多个线程创建日志上下文

java - 如何让丢失的条目在 Guava 中更快地过期