java - 是否可以创建 log.info 切入点?
问题描述
我以前从未尝试过 AOP,想知道是否可以创建一个切入点来捕获 Spring 中 log.info(...) 的执行。
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
@Aspect
public class AfterFinallyExample {
@After("execution(* org.slf4j.*.*(..))")
public void sendLogParameterToServer() {
// ...
}
}
如果可行,是否认为这是一种好习惯?
解决方案
您可以使用 AOP 来执行此操作吗,是的,您可以。你能用默认的 Spring AOP 做到这一点吗?你不能。
默认情况下,Spring AOP 基于代理,它只会为 Spring 管理的 bean 创建代理。由于记录器不是由 Spring 管理的(除非您注入所有记录器),这将不起作用。
您将需要借助编译或加载时编织来使用成熟的 AspectJ。这将根据切入点和方面更改类的实际字节码。
推荐阅读
- android - 如何设置此微调器文本的字体(字体)?
- django - Django crispy-forms:带有 TextArea 字段的 2 列表单
- sql - 使用 SQL 检索已订购商品的总数量
- sql - 在 Oracle 中使用 PARTITION BY 对行进行分组
- migration - 我是否需要将操作迁移到不使用 Dialogflow 的 v2?
- node.js - 为什么在 Express Node JS 中同时请求相同的路由时集群不起作用?
- c++ - 编译器会简化按顺序执行多次的操作吗?
- typescript - TextInput 目标值的类型是什么
- java - 未执行测试 - JUnit 5 以编程方式 + mvn exec
- python - 如何使用 CNN 和 pytorch 改进猫狗分类