我创建了一个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来完成上述操作?
答案 0 :(得分:1)
可能,但是你在谈论对整个jdk运行织布工。该程序将不再可移植,因为它使用修改后的jdk。
更好的解决方案是创建一个extends AbstractAction
的抽象类,其actionPerformed
方法调用一个可以编织的常用方法,并包含在您的库中。
答案 1 :(得分:1)
您不能控制JDK类,而是控制您自己的代码。那么为什么不拦截方法执行而不是调用?
pointcut abcCall() : execution(@Abc * *(..));