首页 > 解决方案 > 是否可以创建 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() {
        // ...
    }
}

如果可行,是否认为这是一种好习惯?

标签: javaspringspring-aop

解决方案


您可以使用 AOP 来执行此操作吗,是的,您可以。你能用默认的 Spring AOP 做到这一点吗?你不能。

默认情况下,Spring AOP 基于代理,它只会为 Spring 管理的 bean 创建代理。由于记录器不是由 Spring 管理的(除非您注入所有记录器),这将不起作用。

您将需要借助编译或加载时编织来使用成熟的 AspectJ。这将根据切入点和方面更改类的实际字节码。


推荐阅读