当前位置: 首页 > 知识库问答 >
问题:

aspectj切入点-在javax中拦截调用。摆动

朱翔
2023-03-14

我创建了一个JMenuItem,它接受一个匿名的内部类AbstractAction:

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

我用注册到我的JavaSwing框架的MenuBar注册了这个JMenuItem。我有一个拦截对@Abc方法调用的切入点

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

关于这个切入点的建议:

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

对actionPerform的调用将源自javax内部。Swing,我只有(rt.jar)的二进制文件-是否可以在编译时编织javax。Swing来完成上述任务?

共有2个答案

李开宇
2023-03-14

可能吧,但你说的是针对整个jdk运行weaver。该程序将不再具有可移植性,因为它使用了修改后的jdk。

更好的解决方案是创建一个扩展AbstractAction的抽象类,它的actionPerform方法调用一个可以编织的通用方法,并包含在您的库中。

薛扬
2023-03-14

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

pointcut abcCall() : execution(@Abc * *(..));
 类似资料:
  • 我正在尝试使用来做同样的事情,现在我使用哪个注释来捕获相关的对象,切入点表达式应该是什么?我尝试了,但这是一个void方法,如何捕获该方法的参数?我是AOP的初学者,所以如果这个问题太琐碎,请原谅。 解决方案:使用spring AOP获取方法参数?

  • 我试图在方法注释上创建一个Aeyj切入点,但我总是用不同的方法失败。我使用的是aspectj自动代理(我在Spring上下文中没有配置其他编织)。我的类如下所示: 所以我想知道为什么aspectj不会创建切入点。我设法使用执行(**(…)使其工作抛出一些exc)这对我来说很好,但我仍然想知道我做错了什么。 另外,由于是在接口中定义的,我指定了实现类的注释,有没有办法让它以这种方式工作?其他代理机制

  • 我不能用“”运算符和多个注释来做切入点。我试图为一些JBehave注释创建一个切入点(@givid、@then、@when)。 为这三个注释创建切入点的语法是什么?因为我在其他切入点中使用了逻辑OR运算符,所以我假设它类似于: 但是它不起作用,我得到一个不一致的绑定异常。我尝试了其他组合,但找不到一个这样做的诀窍。

  • 我使用Spring的和注释来实现一个简单的CRUD-app,可以通过RESTful API使用。现在,我想在我的存储库上添加一个AspectJ切入点,这样每当调用接口中的CRUD-method时,就会执行一些功能。 首先,我扩展了Spring的,以便在自己的接口中添加一些自定义功能: 一切都很好,我可以通过REST客户端调用这个方法。我不必实现接口,因为Spring在后面的工作中是一个奇迹。这是扩

  • 问题内容: 我有这个代码 有什么方法可以在没有子类化或修改类且没有工厂的情况下拦截呼叫? 编辑:抱歉忘了提到这是在Android平台上。 问题答案: 您是否考虑过面向方面的编程,甚至还考虑过AspectJ?有关AspectJ / Android的信息,请参见此处和此处。