Java 如何向由多个子类实现的接口方法添加断点或自定义代码?

Java 如何向由多个子类实现的接口方法添加断点或自定义代码?,java,eclipse,debugging,Java,Eclipse,Debugging,我正在研究的源代码有很多子类(称它们为a和B),使用方法visitProgram实现了一个通用的界面访问者。当任何子类点击此方法(即A.visitProgram或B.visitProgram)时,是否有中断的方法?替代语言解决方案可以,但我无法重写现有的源代码。由于您正在调试,我假设您可以添加一些新代码并构建整个程序 也就是说,您可以使用面向方面编程(AOP)获得捕获visitProgram执行的切入点,理论上,您可以将断点放在切入点中。您可以将AOP看作是一种横向剪切程序的技术(与构建“垂直”

我正在研究的源代码有很多子类(称它们为
a
B
),使用方法
visitProgram
实现了一个通用的
界面访问者。当任何子类点击此方法(即
A.visitProgram
B.visitProgram
)时,是否有中断的方法?替代语言解决方案可以,但我无法重写现有的源代码。

由于您正在调试,我假设您可以添加一些新代码并构建整个程序

也就是说,您可以使用面向方面编程(AOP)获得捕获visitProgram执行的切入点,理论上,您可以将断点放在切入点中。您可以将AOP看作是一种横向剪切程序的技术(与构建“垂直”结构的OOP相反)

在本例中,您希望在每次运行
visitProgram
(您的
Visitor
接口的任何实例化)之前执行一些操作。这是横向切口,所以AOP应该适合您的需要

基本上,您将拥有一个函数,可以在其中设置断点,以便在调用
visitProgram
时,您的程序将在执行之前停止

我建议使用,非常简单,只需按照手册中的安装说明进行操作。您的切入点应该如下所示:

@Aspect
public class BeforeVisitProgram {

    @Before("visitProgram()")
    public void doStuff() {
      // break in here
    }

}

在调用代码和实现之间使用抽象类,例如:

interface DoesStuff {
    void doStuff();
}

abstract class AbstractDoesStuff implements DoesStuff {
    void doStuff() {
        doStuffToo(); // debug point
    }

    abstract void doStuffToo();        
}

这确实意味着您的所有实现都必须是抽象类的子类,所以这种方法可能不适合所有情况

您可以在不是由SpringIOC容器管理的对象上使用SpringAOP吗?加里:我不确定,但你应该能够告诉SpringAOP在构建切入点时应该查看哪些包。我不熟悉构造AspectJ切入点(因为OP的好处:无论使用何种AOP框架,核心概念都是相同的)。谢谢,尽管这比我想要的重构更多。我一直在写这种风格的新课程。(此外,doStuff应为最终版本)。干杯