【问题标题】:Aspectj annotationsAspectj 注释
【发布时间】:2014-10-13 06:50:24
【问题描述】:

我为我的 java 类编写了一个aspect aj 文件,如下所示

pointcut printMessage(String name) : call(public static String myhobby(..)) && args (name);
     before(String name) : printMessage(name) {
            System.out.println("Aspects: "+ name);

     }

我尝试使用注释编写相同的方面文件,如下所示

@Before("call(* myhobby(..)) && args(name)")
         public String callFrom(String name) {
           System.out.println("value is: " + name);
         }
    }

但它显示

 the attribute value is undefined for the annotation Before

谁能告诉我如何解决这个问题

【问题讨论】:

  • 你想在调用方法 String myhobby(..) 之前执行方法 callFrom(String name) 吗?

标签: java aspectj


【解决方案1】:

先生。又乱了。您甚至没有发布正确的错误消息。对于您的切入点,错误消息应该是:

This advice must return void.

而这正是必须改变的。你读过错误信息吗?

@Before("call(* myhobby(..)) && args(name)")
public void callFrom(String name) {
    System.out.println("value is: " + name);
}

不需要任何getArgs() 开销。

【讨论】:

  • @kriegaex...谢谢您,Genius 先生...我知道如何阅读错误消息,并发布了我得到的错误...因为我没有导入导入 org.aspectj。 lang.annotation.*; ...
  • 不,抱歉,这不是真的。然后代码甚至不会编译,你会得到Before cannot be resolved to a type
  • 那你贴的代码不是你编译的代码。我将它复制并粘贴到我的 IDE 中并尝试了。或者您有更多方面的代码,并且您复制的错误消息来自您的其他错误之一。无论如何,我的代码 sn-p 有效,请随意使用。
【解决方案2】:

您可以使用以下代码在 myhobby(..) 方法之前定义一个切入点:

//Method before which point cut needs to be set
@Pointcut("execution(* package.name.ClassName.myhobby(..))")
    public void pointCutFunction() {

    }

@Before("pointCutFunction()")
    public Object myAdvice(final ProceedingJoinPoint proceedingJoinPoint)
             {
Object arr[]=proceedingJoinPoint.getArgs();
 System.out.println("value is: " + arr[0]);

}

希望这能解决您的问题。

【讨论】:

  • 它显示无法解析 ProceedingJoinPoint..我必须导入什么
  • 导入 org.aspectj.lang.ProceedingJoinPoint;
  • 在我的情况下,我添加了 aspectjrt-1.7.4.jar 的依赖项
  • 它工作了..谢谢你..如果我将它导出为一个 jar 并且当我在另一个 java 文件中使用这个 jar 并调用我为其编写方面的 jar(exported jar) 中的函数.. .该函数的建议会运行吗?
  • @Before 建议不需要ProceedingJoinPoint,而只需JoinPoint。前者用于@Around 建议。
猜你喜欢
  • 2018-06-28
  • 1970-01-01
  • 2011-09-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-15
  • 1970-01-01
相关资源
最近更新 更多