如何使用 aspectJ 切入点不匹配强制编译错误
How to force compile error with aspectJ pointcut mismatch
我有以下 aspectJ 切入点:
@Around(value="execution(* *(*,Map<String, Object>)) && @annotation(com.xxx.annotations.MyCustomAnnotation)")
正如您所看到的,这个切入点只匹配方法,用 com.xxx.annotations.MyCustomAnnotation 注释,它有 2 个参数 - 第一个是任意的,第二个必须是 Map<String, Object>
类型。
有没有一种方法可以配置 aspectj-maven-plugin 以在发现使用 com.xxx.annotations.MyCustomAnnotation 注释但与签名 * *(*,Map<String, Object>)
不匹配的方法时强制编译错误?
或者换句话说,:
@com.xxx.annotations.MyCustomAnnotation
public void test(String s, Map<String, String> m) {
...
}
-> 我希望这会产生编译时错误,因为 Map<String, String>
!= Map<String, Object>
您直接在方面内完成,无需在 AspectJ Maven 插件中进行配置。这是一个小例子:
标记注释:
package de.scrum_master.app;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@Retention(RetentionPolicy.RUNTIME)
public @interface MyCustomAnnotation {}
示例应用程序 class:
package de.scrum_master.app;
import java.util.Map;
public class Application {
public void notAnnotated(String s, Map<String, Object> m) {}
@MyCustomAnnotation
public void correctSignature(String s, Map<String, Object> m) {}
@MyCustomAnnotation
public void wrongSignature(String s, Map<String, String> m) {}
}
方法签名不匹配时声明编译错误的方面:
package de.scrum_master.aspect;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.DeclareError;
@Aspect
public class PointcutChecker {
@DeclareError(
"execution(* *(..)) && " +
"@annotation(de.scrum_master.app.MyCustomAnnotation) && " +
"!execution(* *(*, java.util.Map<String, Object>))"
)
static final String wrongSignatureError =
"wrong method signature for @MyCustomAnnotation";
}
编译此代码时,您将在 Eclipse 中看到以下错误作为代码注释和问题视图(Maven 控制台在执行 AspectJ Maven 的 compile
目标时会显示相同的错误):
我有以下 aspectJ 切入点:
@Around(value="execution(* *(*,Map<String, Object>)) && @annotation(com.xxx.annotations.MyCustomAnnotation)")
正如您所看到的,这个切入点只匹配方法,用 com.xxx.annotations.MyCustomAnnotation 注释,它有 2 个参数 - 第一个是任意的,第二个必须是 Map<String, Object>
类型。
有没有一种方法可以配置 aspectj-maven-plugin 以在发现使用 com.xxx.annotations.MyCustomAnnotation 注释但与签名 * *(*,Map<String, Object>)
不匹配的方法时强制编译错误?
或者换句话说,:
@com.xxx.annotations.MyCustomAnnotation
public void test(String s, Map<String, String> m) {
...
}
-> 我希望这会产生编译时错误,因为 Map<String, String>
!= Map<String, Object>
您直接在方面内完成,无需在 AspectJ Maven 插件中进行配置。这是一个小例子:
标记注释:
package de.scrum_master.app;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@Retention(RetentionPolicy.RUNTIME)
public @interface MyCustomAnnotation {}
示例应用程序 class:
package de.scrum_master.app;
import java.util.Map;
public class Application {
public void notAnnotated(String s, Map<String, Object> m) {}
@MyCustomAnnotation
public void correctSignature(String s, Map<String, Object> m) {}
@MyCustomAnnotation
public void wrongSignature(String s, Map<String, String> m) {}
}
方法签名不匹配时声明编译错误的方面:
package de.scrum_master.aspect;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.DeclareError;
@Aspect
public class PointcutChecker {
@DeclareError(
"execution(* *(..)) && " +
"@annotation(de.scrum_master.app.MyCustomAnnotation) && " +
"!execution(* *(*, java.util.Map<String, Object>))"
)
static final String wrongSignatureError =
"wrong method signature for @MyCustomAnnotation";
}
编译此代码时,您将在 Eclipse 中看到以下错误作为代码注释和问题视图(Maven 控制台在执行 AspectJ Maven 的 compile
目标时会显示相同的错误):