当尝试使用ajc和命令行编译方面文件时,我在试图编译*.aj文件(方面语法)时出错。
编译*.java方面(使用注释)时,它工作得很好
方面注释- TestAspect.java
@Aspect
public class TestAspect {
@Pointcut("execution(* TestTarget.test(..))")
void test() {}
@Before("test()")
public void advice(JoinPoint joinPoint) {
System.out.printf("TestAspect.advice() called on '%s'%n", joinPoint);
}
}方面语法- TestAspect.aj
public aspect TestAspect {
pointcut test() : execution(* TestTarget.test*(...));
before() : test()
public void advice(JoinPoint joinPoint) {
System.out.printf("TestAspect.advice() called on '%s'%n", joinPoint);
}
}使用以下命令编译TestAspect.aj im时:
ajc -1.8 -sourceroots ./ -cp aspectjrt.jar;并得到以下错误:
C:\****\TestAspect.aj:3 [error] Syntax error on token "...", "name pattern" expected
pointcut test() : execution(* TestTarget.test*(...));
^
C:\****\TestAspect.aj:6 [error] Syntax error on token "public", "{" expected
public void advice(JoinPoint joinPoint) {
^
C:\****\TestAspect.aj:7 [error] joinPoint cannot be resolved to a variable
System.out.printf("TestAspect.advice() called on '%s'%n", joinPoint);
3 errors在谷歌搜索超过一个小时的时候,我没有找到任何解决方案。即使在文件里也没有。
我可能错过了什么,会很高兴得到帮助的。
发布于 2015-12-22 17:35:31
解决办法:
public aspect TestAspect {
pointcut test() : execution(* TestTarget.test*(..));
before() : test() {
System.out.printf("TestAspect.advice() called on '%s'%n", thisJoinPoint);
}
}1)注意test()参数通配符只有2个点,而不是3个点!
2)通知主体没有方法签名,您可以引用thisJoinPoint而不将它作为参数传递
(请注意,我正在谈论*.aj文件)
https://stackoverflow.com/questions/34415210
复制相似问题