将类型间 public 静态方法添加到 类

Add inter-type public static method to classes

在我的项目中,我有一组 classes(我不知道其名称和编号),我想向其添加一个 public 静态方法。

为简单起见,假设我想添加一个静态方法,returns class 的静态记录器实例。唯一的要求是静态函数应该按如下方式调用:

public class Foo {
    private static final Logger LOG = LoggerFactor.getLogger(Foo.class);

    public static void main(String[] args) {
        Foo.getLogger().info("works!");
    }
}

因为我认为这是一个横切关注点,所以我想在这里用 AspectJ 解决我的问题,但我没有找到关于我的场景的任何信息。

我的问题是:

我知道动态声明我的 classes 实现接口的父级的可能性,但后来我被卡住了,因为我无法在接口上生成静态方法:

public aspect StaticMethodAspect {

    public interface HasStaticMethod {}

    declare parents: ... implements HasStaticMethod;

    public static Logger HasStaticMethod.getLogger() { //aspect error
        ...
    }

}

我也知道this solution,但是不符合我对方法调用方式的要求

感谢您的回复

如果您想通过 ITD 声明静态方法或成员,您需要知道 class 名称,这对您来说并非如此。所以你坚持做与你已经发现的类似的事情,另请参阅我的答案:

这些例子也从另一个方面展示了如何直接进行日志记录,因为通常日志记录也是一个横切关注点。所以如果你能避免手动记录,就用我的方法吧。

但是如果您确实希望每个目标 class 都有一个 静态记录器 并且确实按照您的示例代码显示的方式使用它,请使用 AspectJ 与注释处理的集成 简要描述并链接到我在上面列表中的第一个答案。如果您不理解我提供的两个链接中的示例代码,请随时提出后续问题。