aspectj切入点 - 从javax.swing中拦截调用

时间:2014-04-09 11:35:02

标签: java aop aspectj

我创建了一个JMenuItem,它采用匿名内部类AbstractAction

JMenuItem menuItem = new JMenuItem(new AbstractAction("Item") {
    @Override
    @Abc
    public void actionPerformed(ActionEvent e) {
    // ...
    }
});

我将JMenuItem注册到我的Java Swing框架中注册的MenuBar。 我有一个切入点拦截对@Abc方法的调用

pointcut abcCall() :
    call(@Abc * *(..));

以及对此切入点的建议:

Object around(): abcCall() {
    // ...
}

对actionPerformed的调用将来自javax.Swing,我只有(rt.jar)的二进制文件 - 编译时是否可以编织javax.Swing来完成上述操作?

2 个答案:

答案 0 :(得分:1)

可能,但是你在谈论对整个jdk运行织布工。该程序将不再可移植,因为它使用修改后的jdk。

更好的解决方案是创建一个extends AbstractAction的抽象类,其actionPerformed方法调用一个可以编织的常用方法,并包含在您的库中。

答案 1 :(得分:1)

您不能控制JDK类,而是控制您自己的代码。那么为什么不拦截方法执行而不是调用?

pointcut abcCall() : execution(@Abc * *(..));