我目前正在阅读 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/