【发布时间】:2017-07-19 10:45:14
【问题描述】:
我想创建一个自定义注解来跳过方法执行
这是我的注释代码,带有验证器类
@Target({ METHOD , FIELD , PARAMETER } )
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy={MyValidator .class})
public @interface MyAnnotation {
String message() default "DEFAULT_FALSE";
Class<?>[] groups() default{};
Class<? extends Payload>[] payload() default{};
}
我用验证器试了一下。这就是我的验证器的样子
public class MyValidator implements ConstraintValidator<MyAnnotation, String >{
@Override
public void initialize(MyAnnotation arg0) {
}
@Override
public boolean isValid(String arg0, ConstraintValidatorContext arg1) {
if(str=="msg"){
return true;
}
return false;
}
}
这就是我想使用的方式——我想在方法级别使用注释并跳过方法执行。
我不知道这是否可能..请帮助。
public class Test {
public static void main(String[] args) {
Test t = new Test();
boolean valid=false;
valid=t.validate();
System.out.println(valid);
}
@MyAnnotation(message="msg")
public boolean validate(){
// some code to return true or false
return true;
}
}
【问题讨论】:
-
您需要将
if(str=="msg"){更改为使用equals() -
“跳过”的事情会如何发生?
-
嗨,是的,这就是我的问题,如果可以使用这样的验证器,我不知道是否可以完成
-
@SharonBenAsher,请建议是否有其他方法,感谢您的帮助:)
-
如果您已经知道要跳过方法执行 - 并且您必须知道是否要事先注释目标方法 - 为什么要调用或实现它们?我知道如何通过 AspectJ 轻松实现它,但这种方法本身是有缺陷的。问题仍然存在,如果跳过非 void 方法应该返回什么?举一个更合理的例子,然后我可能会愿意提供帮助。我需要了解您要解决的实际问题,而不是您认为应该如何解决。这两个不一定相同。
标签: java aop aspectj spring-annotations java-annotations